• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • 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 into Emerald

  • 457
    Posts
    10
    Years
    • Seen Sep 29, 2024
    Since there is no thread for an adding/extending moves for Emerald, I just made one. Haha! XD
    Every instruction for adding/extending moves of Emerald is similar to Ruby and FireRed but using different offsets depending on the version of the game. Again, this tutorial is for Emerald. Alright! Let's begin...

    Prerequisites

    List of Tools Needed

    • An Emerald rom
    • Any GameBoy Advance emulator (I'm using VBA-M)
    • Any Hex Editor (I'm using HxD)
    • Any Move/Attack Editor with .ini support (I'm using G3T)
    • Calculator (for Windows users, you should be in programmer mode)
    • Free Space Finder (optional, for looking free spaces)
    • Knowledge in Basic Math (Multiplying applies here. Regret your life if you hated math)
    • Knowledge on Hex Editing (Do you know "repointing?" If yes, you may proceed)

    List of Data Needed

    • Emerald Move Data Table: 31C898
    • Emerald Move Name Table: 31977C
    • Emerald Move Animation Table: 2C8D6C
    • Emerald Move Description Table: 61C524
    • Emerald Move Contest Data: 58C2B4
    • Emerald 6-byte Limiter: 14E504
    • Emerald Move Effects Table: 2D86A8

    Decide the Number of New Moves

    Before to get started, you need to think of a total number of new moves which you will add later. The current number of moves are 355. So, you will have to pick a number which is more than 355. The answer you would come up is 512. So, you will use 512 or 0x200 in Hex. Also, keep in mind that in the rest of tutorial will be Hex numbers. The question: why 512? It is because the game only supports up to 512 in the fresh way. You may also have this more than 512 but it will be complicated. I will update this tutorial soon for those who want to do more than 512. In this tutorial, I will be using 512 moves. Advice on typing hex numbers on filters, do not type the "0x". So, let's move on!

    Adding New Moves

    Step 1: Move Names

    • The current Move Names table is at 0x0831977C.
    • The Move Names table has 13 bytes (0xD bytes) each move.
    • Go to a free space to create a new Move Names table (I will be using 0x08BDC960).
    • Create a new Move Names table there. Multiply your desired new number of moves by 13 (0xD). Since I'm using 512 so, multiply 512 by 13 (0x200 by 0xD).
    • Select blocks and the type the length with the number of the result (mine is 6656 in decimal or 0x1A00 hexadecimal). Then fill the selection with this string: AE FF FF FF FF FF FF FF 00 00 00 00 00. There you go! You got your new table.
    • Navigate to 0x0831977C to the Move Names table.
    • Select and copy 4615 bytes (0x1207 bytes) of data.
    • Paste it to where your new Move Names table starts.
    • Repoint all references of the Move Names table to the new table. Replace all 7C 97 31 08 to the pointer of your new table (my new data is at 0x08BDC960 so, I will use 60 C9 BD 08).
    • If you want to erase the old data to have new spaces, navigate back to 0x0831977C to the Move Names table. Select 4615 bytes (0x1207 bytes) of data. Then, fill it with "FF".

    Step 2: Move Data

    • The current Move Data table is at 0x0831C898.
    • The Move Data table has 12 bytes (0xC bytes) each move.
    • Go to a free space to create a new Move Data table (I will be using 0x08BDE360).
    • Create a new Move Data table there. Multiply your desired new number of moves by 12 (0xC). Since I'm using 512 so, multiply 512 by 12 (0x200 by 0xC).
    • Select blocks and the type the length with the number of the result (mine is 6144 in decimal or 0x1800 hexadecimal). Then fill the selection with"00". There you go! You got your new table.
    • Navigate to 0x0831C898 to the Move Data table.
    • Select and copy 4260 bytes (0x10A4 bytes) of data.
    • Paste it to where your new Move Data table starts.
    • Repoint all references of the Move Data table to the new table. Replace all 98 C8 31 08 to the pointer of your new table (my new data is at 0x08BDE360 so, I will use 60 E3 BD 08).
    • If you want to erase the old data to have new spaces, navigate back to 0x0831C898 to the Move Data table. Select 4260 bytes (0x10A4 bytes) of data. Then, fill it with "FF".

    Step 3: PP Data

    • The PP Data is 4 bytes plus the Move Data table. If the original table is at 31C898 so, that makes 31C89C.
    • Repoint all references of the Move Data table to the new table. Replace all 9C C8 31 08 to the pointer of your new table (my new data is at 0x08BDE360 so, I will use 64 E3 BD 08).

    Step 4: Move Animation Table

    • The current Move Animations table is at 0x082C8D6C.
    • The Move Animations table has 4 bytes each move. It is a table of pointers.
    • Go to a free space to create a new Move Animations table (I will be using 0x08BDFB60).
    • Create a new Move Animations table there. Multiply your desired new number of moves by 4. Since I'm using 512 so, multiply 512 by 4 (0x200 by 0x4).
    • Select blocks and the type the length with the number of the result (mine is 2048 in decimal or 0x800 hexadecimal). Then fill the selection with this string: 98 93 2C 08. There you go! You got your new table.
    • Navigate to 0x082C8D6C to the Move Animations table.
    • Select and copy 1420 bytes (0x58C bytes) of data.
    • Paste it to where your new Move Animations table starts.
    • Repoint all references of the Move Animations table to the new table. Replace all 6C 8D 2C 08 to the pointer of your new table (my new data is at 0x08BDFB60 so, I will use 60 FB BD 08).
    • If you want to erase the old data to have new spaces, navigate back to 0x082C8D6C to the Move Animations table. Select 1420 bytes (0x58C bytes) of data. Then, fill it with "FF".

    Step 5: Move Description Table

    • The current Move Descriptions table is at 0x0861C524.
    • The Move Descriptions table has 4 bytes each move. It is a table of pointers.
    • Go to a free space to create a new Move Descriptions table (I will be using 0x08BE0360).
    • Create a new Move Descriptions table there. Multiply your desired new number of moves by 4. Since I'm using 512 so, multiply 512 by 4 (0x200 by 0x4).
    • Select blocks and the type the length with the number of the result (mine is 2048 in decimal or 0x800 hexadecimal). Then fill the selection with this string: C1 81 61 08. There you go! You got your new table.
    • Navigate to 0x0861C524 to the Move Descriptions table.
    • Select and copy 1420 bytes (0x58C bytes) of data.
    • Paste it to where your new Move Descriptions table starts.
    • Repoint all references of the Move Descriptions table to the new table. Replace all 24 C5 61 08 to the pointer of your new table (my new data is at 0x08BE0360 so, I will use 60 03 BE 08).
    • If you want to erase the old data to have new spaces, navigate back to 0x0861C524 to the Move Descriptions table. Select 1420 bytes (0x58C bytes) of data. Then, fill it with "FF".

    Step 6: Contest Data

    • The current Move Contest Data table is at 0x0858C2B4.
    • The Move Contest Data table has 8 bytes each move.
    • Go to a free space to create a new Move Contest Data table (I will be using 0x08BE0B60).
    • Create a new Move Contest Data table there. Multiply your desired new number of moves by 8. Since I'm using 512 so, multiply 512 by 8 (0x200 by 0x8).
    • Select blocks and the type the length with the number of the result (mine is 4096 in decimal or 0x1000 hexadecimal). Then fill the selection with "00". There you go! You got your new table.
    • Navigate to 0x0858C2B4 to the Move Contest Data table.
    • Select and copy 2840 bytes (0xB18 bytes) of data.
    • Paste it to where your new Move Contest Data table starts.
    • Repoint all references of the Move Contest Data table to the new table. Replace all B4 C2 58 08 to the pointer of your new table (my new data is at 0x08BE0B60 so, I will use 60 0B BE 08).
    • If you want to erase the old data to have new spaces, navigate back to 0x0858C2B4 to the Move Contest Data table. Select 2840 bytes (0xB18 bytes) of data. Then, fill it with "FF".

    Step 7: Removing the Limiter

    • The 6-byte limiter is at 0x0814E504.
    • Replace B1 20 40 00 81 42 with 00 00 00 00 00 00 to disable the limiter.
    • There is another should be disabled as well. Go to 0x080D8F0C then type 00 00 00 00 00 00 there. This is to disable the limiter which the game reads related to Contest such as "Treecko used a Cool move" (the same situation in the "Bulbasaur used a POISON move" situation).
    • Go to 0x080DE83A then type 00 00 00 00 00 00 there. I'm not sure what it is but this makes animations used in Contest but it seems to mess with some move animations when you disable them. Gonna look into this soon.

    Extending New Move Effects

    Step 1: Extending the Table

    • The current Move Effects Data table is at 0x082D86A8. Noted that this time, this no longer need your new number of moves. The highest can the game support is 256. So, we will be using 256.
    • The Move Effects Data table has 4 bytes each move. It is a table of pointers.
    • Go to a free space to create a new Move Effects Data table (I will be using 0x08BE1B60).
    • Create a new Move Effects Data table there. Multiply your desired new number of move effects by 4. Since I'm using 256 so, multiply 256 by 4 (0x100 by 0x4).
    • Select blocks and the type the length with the number of the result (mine is 1024 in decimal or 0x400 hexadecimal). Then fill the selection with this string: "00 8A 2D 08". There you go! You got your new table.
    • Navigate to 0x082D86A8 to the Move Effects Data table.
    • Select and copy 856 bytes (0x358 bytes) of data.
    • Paste it to where your new Move Effects Data table starts.
    • Repoint all references of the Move Effects Data table to the new table. Replace all A8 86 2D 08 to the pointer of your new table (my new data is at 0x08BE1B60 so, I will use 60 1B BE 08).
    • If you want to erase the old data to have new spaces, navigate back to 0x082D86A8 to the Move Effects Data table. Select 856 bytes (0x358 bytes) of data. Then, fill it with "FF".

    The next thing you will need to do is to replace data or offsets in the .ini of programs that uses move data (such as items for TMs and Pokemon learnsets). I will update the tutorial later with steps on adding to those are related to moves such as move backgrounds. And, also for those who want "more than 512" support. I'm just waiting for a certain patch for that fix.

    This thread might be the next thing you would do after adding new moves and effects:
    https://www.pokecommunity.com/threads/300524

    If you are looking the way to extend move particles:
    https://www.pokecommunity.com/threads/308062

    Credits

    • kleenexfeu: for informing me the Contest Limiters.
     
    Last edited:
    You forgot to mention the move effect table and the contest effect data table; those should be repointed as well.
    Move effect table: 0x2D86A8 length: 0x358
    Contest effect data table: 0x58CECC length: 0xC0 (Thanks MrDollSteak for correcting me on that)
    I forgot how long they are. I'll post the lengths once I get some sleep and regain my sanity.
    Other than that, great job with the tutorial. Also, the contest data stuff was documented a long time ago by Tlachtli (and Bulbapedia). Sorry to burst your bubble :p
     
    Last edited:
    You forgot to mention the move effect table and the contest effect data table; those should be repointed as well.
    Move effect table: 0x2D86A8
    Contest effect data table: 0x58CDCC
    I forgot how long they are. I'll post the lengths once I get some sleep and regain my sanity.
    Other than that, great job with the tutorial. Also, the contest data stuff was documented a long time ago by Tlachtli (and Bulbapedia). Sorry to burst your bubble :p

    You don't actually need to repoint the Move Effect table I don't think. Unless of course you want to make new contest effects, but I feel like 47 is probably enough.

    Yeah contest data has been around for a while. Combo information is also something you should mention. To expand combos you need to go to the table at 58CE8C (currently has 64 entries), 0 and 64 lead to no combo and it cancels. So to expand this just repoint it, and add as many 1s as you want and end it with an 0.
     
    You don't actually need to repoint the Move Effect table I don't think. Unless of course you want to make new contest effects, but I feel like 47 is probably enough.

    Yeah contest data has been around for a while. Combo information is also something you should mention. To expand combos you need to go to the table at 58CE8C (currently has 64 entries), 0 and 64 lead to no combo and it cancels. So to expand this just repoint it, and add as many 1s as you want and end it with an 0.
    Wait when you say move effect table, are you referring to my first table or the second? Because I was under the impression that the moves effect table (0x1D65A8 in FR) has nothing to do with contests at all.
    Also, didn't know contest combos existed at all until today. Guess you learn something new everyday lol.
     
    Why is there so much hex in rom hacking? What did they code GBA games in?
     
    Wait when you say move effect table, are you referring to my first table or the second? Because I was under the impression that the moves effect table (0x1D65A8 in FR) has nothing to do with contests at all.
    Also, didn't know contest combos existed at all until today. Guess you learn something new everyday lol.

    I meant the Contest Move Effect table, sorry for not making that clear. It's just cause you mentioned 58CDCC (which isn't actually the full Move Effect table, it's just an index thing that says what text to use.)
     
    You forgot to mention the move effect table and the contest effect data table; those should be repointed as well.
    Move effect table: 0x2D86A8 length: 0x358
    Contest effect data table: 0x58CEBC length: 0xC0 (Thanks MrDollSteak for correcting me on that)
    I forgot how long they are. I'll post the lengths once I get some sleep and regain my sanity.
    Other than that, great job with the tutorial. Also, the contest data stuff was documented a long time ago by Tlachtli (and Bulbapedia). Sorry to burst your bubble :p

    Yeah. I've forgot to mention move effect table since I'm still looking for the right table of it. Anyways, WOW! That should be it. I've been looking for the table. Thanks! I will rewrite this tutorial with Creating New Move Effects just like a tutorial for FireRed.
     
    Contest effect data table: 0x58CEBC length: 0xC0

    It's at 58CECC, and length 0xC0. Think that's probably a type on your part :P

    But yeah seems to be a series of routines that dictate how Appeal and Jam go.
    Don't really think it needs expanding.

    The one you'll want to expand as I mentioned before is the Combo table at 58CE8C,
    which is a length of 0x40. Each entry is 1 byte long, so I'd just expand it to a length of 0xFF.
    To expand it just make every byte 01 except for the first and last one which are 00.
     
    Great job on the tutorial! It really helped me out a lot!

    I am having a bit of a problem, though I don't know if it's large or small. I just wanted to be able to add new moves and not have to worry about adding new move effects (at least not for a little while), and it's working well so far. The INI of G3HS accepts the changes made to it (though I wish there really was an editor for moves in it), and I was able to get into it just fine. However, it was different with GBAPGE, it's completely different. I get an unhandled exception error, and when I click 'Continue' it loads up the moves just fine, even the new ones, and when I go to some of the new moves (labelled as "POUND", or "-" for example) I get even more unhandled exception errors. Would you think if I edited them it would make them go away, or am I missing something? I had a prior unhandled exception error involving the move names, but it was fixed when I had a backup of the INI for GBAPGE ready to go, and I made sure to type it out and not copy it, so as not to get an extra space in there. And that's what lead me up to now.

    Could either you or MrDollSteak help me out? Would really appreciate it! Thanks! ;)
     
    Great job on the tutorial! It really helped me out a lot!

    I am having a bit of a problem, though I don't know if it's large or small. I just wanted to be able to add new moves and not have to worry about adding new move effects (at least not for a little while), and it's working well so far. The INI of G3HS accepts the changes made to it (though I wish there really was an editor for moves in it), and I was able to get into it just fine. However, it was different with GBAPGE, it's completely different. I get an unhandled exception error, and when I click 'Continue' it loads up the moves just fine, even the new ones, and when I go to some of the new moves (labelled as "POUND", or "-" for example) I get even more unhandled exception errors. Would you think if I edited them it would make them go away, or am I missing something? I had a prior unhandled exception error involving the move names, but it was fixed when I had a backup of the INI for GBAPGE ready to go, and I made sure to type it out and not copy it, so as not to get an extra space in there. And that's what lead me up to now.

    Could either you or MrDollSteak help me out? Would really appreciate it! Thanks! ;)

    I suggest you should check on what you have expanded and what you have changed in the ini-s whether there's something wrong or not. I guarantee that my tutorial is 100% no error show up in GBAPGE. At the first, that error shows up when the time I haven't known to expand the move contest data. When I expanded it, it is the contest data that errors not the name. The names worked out perfectly. Check those again dude. I guess that you have mistyped in your ini-s.
     
    I suggest you should check on what you have expanded and what you have changed in the ini-s whether there's something wrong or not. I guarantee that my tutorial is 100% no error show up in GBAPGE. At the first, that error shows up when the time I haven't known to expand the move contest data. When I expanded it, it is the contest data that errors not the name. The names worked out perfectly. Check those again dude. I guess that you have mistyped in your ini-s.

    I'm not saying that your tutorial is wrong in any way, in fact I have 65 moves that I have programmed in ready to be used. I ALWAYS proofread these things before I save them, and if I ever make a mistake, that's why we all make backups, right? And I think you're right, it isn't the names that error, it might be the contest data, but almost every time I load it up now, there are no errors to be had. Again, thanks so much for the tutorial, and good luck on all your future endeavors! :D

    EDIT: I am actually still having problems...

    I have gone through the INI four times to make sure that nothing is wrong or out of the ordinary, and nothing is. There is however one thing that was weird to me... Did you ever want us to change the PokemonAttackTable too? Because I changed it and nothing seemed to happen, but I digress. The weird thing that happened was this; every time I try to view a move in the status screen, it crashes the game when it tries to load a description. I tried it on both NO$GBA and VBA, and on VBA I got this error:
    "Unsupported BIOS function 3a called from 030063d0. A BIOS file is needed in order to get correct behaviour." Though after I clicked OK, it still loaded up the description, but not before it loaded the power and accuracy and the game freezing on me. Believe me, I've gone through my change file four times, and my INI for now a fifth time, and I went back to this post and I changed everything that is needed, and I still get a game crashing and error messages. Tell you what, I'll send you a link to a RAR file that contains the ROM itself, what changes I made, and the INIs for both GBAPGE and G3HS. Don't change anything, just PLEASE tell me what's wrong so I can fix this, 'cause I had an error once that completely deleted my save. Twice. Here is the link to my MediaFire where you can download and extract the folder. Please help me out further. Thanks (your tutorial is still amazing, by the way. I'm STILL finding moves I can add in without adding different move effects. :P)
     
    Last edited:
    I'm not saying that your tutorial is wrong in any way, in fact I have 65 moves that I have programmed in ready to be used. I ALWAYS proofread these things before I save them, and if I ever make a mistake, that's why we all make backups, right? And I think you're right, it isn't the names that error, it might be the contest data, but almost every time I load it up now, there are no errors to be had. Again, thanks so much for the tutorial, and good luck on all your future endeavors! :D

    EDIT: I am actually still having problems...

    I have gone through the INI four times to make sure that nothing is wrong or out of the ordinary, and nothing is. There is however one thing that was weird to me... Did you ever want us to change the PokemonAttackTable too? Because I changed it and nothing seemed to happen, but I digress. The weird thing that happened was this; every time I try to view a move in the status screen, it crashes the game when it tries to load a description. I tried it on both NO$GBA and VBA, and on VBA I got this error:
    "Unsupported BIOS function 3a called from 030063d0. A BIOS file is needed in order to get correct behaviour." Though after I clicked OK, it still loaded up the description, but not before it loaded the power and accuracy and the game freezing on me. Believe me, I've gone through my change file four times, and my INI for now a fifth time, and I went back to this post and I changed everything that is needed, and I still get a game crashing and error messages. Tell you what, I'll send you a link to a RAR file that contains the ROM itself, what changes I made, and the INIs for both GBAPGE and G3HS. Don't change anything, just PLEASE tell me what's wrong so I can fix this, 'cause I had an error once that completely deleted my save. Twice. Here is the link to my MediaFire where you can download and extract the folder. Please help me out further. Thanks (your tutorial is still amazing, by the way. I'm STILL finding moves I can add in without adding different move effects. :P)

    I have finally seen the problem. In fact that there is NO problem on your expansion of attacks and effects. The true problem I saw is your implementation of the Physical/Special icons. You have forgotten to insert the ASM and the image. In move tutors, that unsupported BIOS error occurs... while viewing the summary, an error occurs like shufflejoy posted his screenshot at the PSS thread.

    Again, it is in the implementation of the PSS icons and you have forgotten to import the ASM and the image so that is why your game crashes. I have checked the offset of the ASM (at F53D00). It contains nothing but free space. To fix that problem, you need to insert the ASM and the image. Follow up my modified tlachtli's PSS post in the PSS thread. OR...

    I'll help you out. If you are sticking with F53D00 as the ASM, open up your hex editor, paste overwrite these bytes on F53D00:
    Spoiler:


    With that, your problem is solved. No need to expand PokemonAttackTable to add new moves. That's for if you wanted to expand the Pokedex.
     
    I have finally seen the problem. In fact that there is NO problem on your expansion of attacks and effects. The true problem I saw is your implementation of the Physical/Special icons. You have forgotten to insert the ASM and the image. In move tutors, that unsupported BIOS error occurs... while viewing the summary, an error occurs like shufflejoy posted his screenshot at the PSS thread.

    Again, it is in the implementation of the PSS icons and you have forgotten to import the ASM and the image so that is why your game crashes. I have checked the offset of the ASM (at F53D00). It contains nothing but free space. To fix that problem, you need to insert the ASM and the image. Follow up my modified tlachtli's PSS post in the PSS thread. OR...

    I'll help you out. If you are sticking with F53D00 as the ASM, open up your hex editor, paste overwrite these bytes on F53D00:
    Spoiler:


    With that, your problem is solved. No need to expand PokemonAttackTable to add new moves. That's for if you wanted to expand the Pokedex.

    You are a godsend! Thanks so much! That's weird... All I forgot to do was insert the ASM... I already had the Physical/Special Split for Emerald, had I known I was to insert that ASM in the first place for a specific reason that was needed later on, I would've done so in the first place. Again, thanks a lot! ;)
     
    Can you please tell me what I've done wrong. I keep getting the 'record number is not a valid value' error in PGE. All the original moves work fine, it's just the new ones.
    Some attacks don't break PGE but for descriptions they have nature names 'lax' 'naughty' 'modest' even though they should share the same descriptions as the old ones.
     
    Can you please tell me what I've done wrong. I keep getting the 'record number is not a valid value' error in PGE. All the original moves work fine, it's just the new ones.
    Some attacks don't break PGE but for descriptions they have nature names 'lax' 'naughty' 'modest' even though they should share the same descriptions as the old ones.

    Did you edit the pokeroms.ini file in order to reflect the repointed table changes? If not, then this might be the reason.
     
    Did you edit the pokeroms.ini file in order to reflect the repointed table changes? If not, then this might be the reason.

    Yes, all of the necessary ones are updated. It displays the names of the new ones but clicking on them causes the error.
     
    Hi, I have a problem on this
    Everything work fine in battle and all, but when I'm in a contest, the animation of new moves doesn't work. It doesn't break anything, I can still do the contest but there's only the tackle (or pound) animation with "Treecko used a tough move" or something like that.
    What's wrong ?

    Ok there's two limiters : at 0xD8F0C for the "XX used tough/smart/cool/beauty move" and 0xDE83A for the animation. You have to put 00 00 00 00 00 00 as for the battle limiter. But it seems to mess with some animation (doom desire for exemple) when you disable them
     
    Last edited:
    Hi, I have a problem on this
    Everything work fine in battle and all, but when I'm in a contest, the animation of new moves doesn't work. It doesn't break anything, I can still do the contest but there's only the tackle (or pound) animation with "Treecko used a tough move" or something like that.
    What's wrong ?

    Ok there's two limiters : at 0xD8F0C for the "XX used tough/smart/cool/beauty move" and 0xDE83A for the animation. You have to put 00 00 00 00 00 00 as for the battle limiter. But it seems to mess with some animation (doom desire for exemple) when you disable them

    Thanks! Haven't tested that yet but I can guarantee to have those necessary. Are you sure with DE83A? You said that it seems to mess up move animations when the limiter is disabled.

    Edited the first post!
     
    Back
    Top