• Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
  • Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
  • Our weekly protagonist poll is now up! Vote for your favorite Conquest protagonist in the poll by clicking here.
  • 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.

Adding New Moves and Creating New Move Effects

itman

Back to ROM hacking. :D
  • 98
    Posts
    17
    Years
    • Seen Feb 5, 2014
    This is a tutorial on how to add new moves to Pokemon Fire Red without replacing old ones, and a start on creating new move effects. This info was founded by Jambo51, and the original thread can be found here:

    https://www.pokecommunity.com/threads/263479

    Due to it being a tad confusing to some (because it was never written to be a tutorial in the first place), I thought I would make it easier to follow because this is huge, and I feel like many hacks could benefit from this. This is for Fire Red BPRE 1.0 (aka FR US 1.0) by the way. To know if you have a BPRE ROM, load it up and watch the title screen. If the "Presents" after the Gamefreak symbol doesn't show up, you have BPRE. I hope this makes it easier for people to understand how to do it.

    What's needed:
    1. FIre Red BPRE 1.0 ROM (aka FR US 1.0)
    2. A Hex Editor (I'll be using Hex Workshop).
    3. Pokemon Game Editor by Gamer2020. (Download it here: https://www.pokecommunity.com/threads/265635).
    4. As Jambo excellently puts it, *PATIENCE*.


    PART ONE - ADDING NEW MOVES WITHOUT REPLACING EXISTING ONE

    Step One
    Spoiler:


    Step Two

    Spoiler:



    Step Three

    Spoiler:



    Step Four

    Spoiler:



    Step Five

    Spoiler:


    Step Six

    Spoiler:



    Step Seven

    Spoiler:



    Step Eight

    Spoiler:



    Step Nine

    Spoiler:



    Step Ten

    Spoiler:



    Step Eleven

    Spoiler:



    Step Twelve

    Spoiler:



    Step Thirteen

    Spoiler:



    Step Fourteen

    Spoiler:



    Step Fifteen

    Spoiler:



    Step Sixteen

    Spoiler:



    Step Seventeen

    Spoiler:



    Step Eighteen

    Spoiler:



    Step Nineteen

    Spoiler:



    Step Twenty

    Spoiler:



    Step Twenty-One

    Spoiler:



    Step Twenty-Two

    Spoiler:



    From Here...

    Spoiler:




    PART 2 - CREATING NEW MOVE EFFECTS

    Step One

    Spoiler:



    Step Two

    Spoiler:



    Step Two and a Half (hehe)

    Spoiler:



    Step Three

    Spoiler:



    Step Four

    Spoiler:



    Step Five

    Spoiler:



    Step Six

    Spoiler:


    But what if we want to add multiple effects?
    For example, Flare Blitz?

    Jambo51 made a way to do so.


    DON'T MOVE ON UNLESS YOU UNDERSTAND EVERYTHING ELSE!

    Spoiler:



    Now, for more complicated moves, other moves need to be dissected and experimented with to be found. The Hammer Arm code is my own, while the Flare Blitz code is Jambo's. Here are a few more. If you have successfully made a move effect, please let me know and I'll update it to this post.

    Spoiler:


    Quiver Dance -Made by pawell6

    Spoiler:


    Coil - Made by Garuga17

    Spoiler:


    Close Combat - Made by pawell6

    Spoiler:


    Note: this guide does not cover assigning different animations other than the inherited ones. I will add it soon once I figure out how to do it. ;)

    EDIT: Take a look at this thread to make custom animations, by Chaos Rush: https://www.pokecommunity.com/threads/281520

    EDIT2: Everyone do this too. Update PGE's ini file (Open up PGE, goto Help > Update > ROM ini file). Then, go to where we were changing the pointers for the attack data and such, and there should be a new pointer at the bottom that says "AttackAnimationPointer". Change that to your new location for the attack animations (the one originally at 0x1C68F4, in my examples I placed it at 0x90336C).
     
    Last edited:
    WHOA

    whoawhoawhoawhoawhoa

    This is amazing. I love how you adapted Jambo's tutorial into an easy, picture-followable tutorial. And adding the effects - I don't have time to do it right now but this will be VERY VERY VERY useful in the future. Thank you! :)

    but I base most of my experiments on Ruby and all of this is for FireRed

    /ragemovetofirered
     
    Last edited:
    In case anyone is wondering about attack animations, here is what I've documented on it:
    https://www.pokecommunity.com/threads/281520

    Hopefully with itman's tutorial, we'll finally start seeing more hacks with Gen IV/V/custom moves. I linked to my thread so people won't make new moves using existing animations, because custom animations are cool :P
     
    Funny, I was just thinking of this the other day. Finally, now with Jambo's patch, Rush's Pokemon Sprites, and now the ability to insert new moves, we can finally have 4th and 5th gen Pokemon and there moves in Pokemon Fire Red! Now if only we could add new abilities...
     
    Excellent tutorial, sir. Although, I did notice you forgot to change the animations pointer in PGE's ini, which could lead to bugs down the line. :P

    Funny, I was just thinking of this the other day. Finally, now with Jambo's patch, Rush's Pokemon Sprites, and now the ability to insert new moves, we can finally have 4th and 5th gen Pokemon and there moves in Pokemon Fire Red! Now if only we could add new abilities...

    We CAN add abilities (as I have done in my 649 Patch Project). Unfortunately, however, the vast majority can only be inserted at an ASM level, making it largely inaccessible to most hackers. Some can be inserted at the Battle Scripting level though, such as adding the Multitype clause to Transform.
     
    I tried doing this for Ruby, but you lost me at Step 15. Where is the Attack Animation offset?
     
    This looks like it will be very helpful for people to start learning, but I'd like to point out that that Hammer Arm script will not pierce Clear Body like in the vanilla games- you have to do a little more work. (This is actually quite important as one of the most well-known users of Hammer Arm is Metagross.)

    Using JPAN's old thread on Battle Scripts, I was able to piece together one that does:

    Edit: This script is old and will fail on misses/hitting immunities, look on page 4 for a better one

    Spoiler:


    And the decompiled logic for those wondering what I'm doing:

    Spoiler:


    Also, a bit of cautionary advice- if any of the effects you're inserting are important enough that you want the AI to use them in battle, make sure they replace appropriate effects. For example, there was a Japanese hack that replaced Nightmare's somewhat useless effect with one similar to Relic Song (10% chance to inflict Sleep), which is fun for the player, but was useless for the AI because it would only use the attack if either it was their only option or the foe was already asleep. I currently have no idea how the AI treats effects in unused slots, so be careful with those.
     
    Last edited:
    It's not in roms.ini. You have to find it yourself. Same thing happened to me, so I moved to FireRed :/

    Also, when we select, is 4260 bytes in hex or in decimal?
    I tried using a technique that incorporated using Fire Red's hex values. I was going to copy the beginning of the hex values and find them in the Ruby rom. It didn't work. Though, I found the first two hex values of the animations from Fire Red and in Ruby. The rest didn't match up though...
     
    I tried using a technique that incorporated using Fire Red's hex values. I was going to copy the beginning of the hex values and find them in the Ruby rom. It didn't work. Though, I found the first two hex values of the animations from Fire Red and in Ruby. The rest didn't match up though...
    Pointers are going to be different between ROMs. The Attack Animation offset is a table, and a table in terms of ROM hacking, is a collection of pointers that the game refers to. So obviously tables will be completely different, but they will be in the same format. In order to find the Attack Animation Table in Ruby, what you should do is this:

    1. Go to the offset of the table in a FireRed ROM
    2. Go to the offset that the first pointer lists in the table
    3. NOW search for that hex data in a Ruby ROM
    4. Look at the offset that the search took you in the Ruby ROM, then convert it to a pointer
    5. Search for your new pointer in the Ruby ROM
    6. You should now be at the Animation Table for Ruby
     
    Would this apply to Hm's as well?
    And would this allow you to give tms an Hm's effect (i.e. Tm Dig actually Digging with the same effects of Dive)
     
    @itman: Your Wake-Up Slap script doesn't work. If the opponent is not asleep, it works fine. But if the opponent is asleep, the game freezes.
     
    @itman: Your Wake-Up Slap script doesn't work. If the opponent is not asleep, it works fine. But if the opponent is asleep, the game freezes.

    I just tested it and it worked for me. All I did was edit smellingsalt's effect to check for sleep and then wake them up. So all I changed was two bytes.
     
    I've successfully added 125 or more moves to the game. The question is, how come every time I try to use that move in game, the move does crap? Seriously, I tried using Blue Flare, but the game just reset itself, and when I tried using Bolt Strike, the game froze. And, when I tried to check out the description in the Summary window of either move, a bunch of random symbols and numbers appeared, freezing the game. Can someone please help me with this? I'm trying to make a Black 2/White 2 demake for Ruby, and I need the extra moves to work. :/

    Maybe it's because there is no animation data...where is the tutorial for that?
     
    Last edited:
    Does anyone else have errors with PGE when trying to edit the newer versions of Psywave, Focus Energy, and Reflect? It's weird, but yeah...

    Also, when using the moves WITHOUT removing the limiter it says Bulbasaur used a NORMAL move when trying to use a move I added. When I got rid of the limiter it made it so that even the trainer I'm battling's pokemon moves say that. For example it'd be like Bulbasaur used a normal move. Foe Charmander used a normal move. help? lol

    On to trying move effects =.= I fail

    EDIT: Where did the the offset 0x1D6947 come from for the flare blitz part?
     
    Last edited:
    Also, when using the moves WITHOUT removing the limiter it says Bulbasaur used a NORMAL move when trying to use a move I added. When I got rid of the limiter it made it so that even the trainer I'm battling's pokemon moves say that. For example it'd be like Bulbasaur used a normal move. Foe Charmander used a normal move. help? lol

    At 0xD75FC, you are supposed to overwrite the bytes with 00 00 00 00 00 00. Not 00 00 00 00 00 00 00 00. Overwriting the last two will make every move say "X used a <TYPE> move!" This is another error in the guide that should be fixed.
     
    At 0xD75FC, you are supposed to overwrite the bytes with 00 00 00 00 00 00. Not 00 00 00 00 00 00 00 00. Overwriting the last two will make every move say "X used a <TYPE> move!" This is another error in the guide that should be fixed.

    *Fixed. ;) Thanks for letting me know, I didn't even realize I put too many 00's lol.
     
    At 0xD75FC, you are supposed to overwrite the bytes with 00 00 00 00 00 00. Not 00 00 00 00 00 00 00 00. Overwriting the last two will make every move say "X used a <TYPE> move!" This is another error in the guide that should be fixed.

    :D thank youu. I was thinking that I probably screwed up somewhere. After all I am very bad at this.
     
    Back
    Top