- 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...
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
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: