• 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 Custom Particles

MrDollSteak

Formerly known as 11bayerf1
858
Posts
15
Years
Move Hacking has come along way recently, especially in the past year.
Karatekid552 and I had at some point started researching Particle effects and the
02 commands. It was also then that Karatekid552 located the Particle and Palette
table. We both believe that the table could be extended, however until now neither
of us had tried. I have since, extended the table and added a new custom particle
and palette entry, and fixed glitches relating to it through ASM.

Just to reiterate all the offsets are for FireRed and Emerald.

Tools Needed:
Spoiler:


General Information on the structure of the table:
Spoiler:


STEP 1:
Spoiler:


STEP 2:
Spoiler:


STEP 3:
Spoiler:


STEP 4:
Spoiler:


STEP 5:
Spoiler:


STEP 6:
Spoiler:


IMPORTANT EDIT!

There is one more thing to fix, and that is the Shiny Pokemon entry animation!
Otherwise, if a Shiny Pokemon is sent out into battle the game will freeze.

STEP 7:
Spoiler:


And there you have it! Custom particles.
Nb61CPT.png
sVpGzes.png


I'd once again like to thank Karatekid552 for getting the ball rolling, and for his documentation.
Also credits to HidoranBlaze for finding the relevant Emerald offsets.
 
Last edited:

pawell6

The truthseeker
50
Posts
14
Years
Great tut! I managed to add and apply 7 new particles (for now). But there are few things I noticed:

1) In step 6 when I correct both pointers all particles load with glitches, but everything is fine when I alter the second pointer only.

2) Some particles load with glitches for certain 02 command and correctly load for others 02 command. For example when I try to load my 32x32 particle with 02 command for shadow ball everything is fine, but when I try to load the same particle with 02 command for karate chop, it shows up with glitches. I think it has something with size for particle. Originally shadow ball and karate chop with indexes CO and 9F respectively have different size in table.
 

MrDollSteak

Formerly known as 11bayerf1
858
Posts
15
Years
Great tut! I managed to add and apply 7 new particles (for now). But there are few things I noticed:

1) In step 6 when I correct both pointers all particles load with glitches, but everything is fine when I alter the second pointer only.

2) Some particles load with glitches for certain 02 command and correctly load for others 02 command. For example when I try to load my 32x32 particle with 02 command for shadow ball everything is fine, but when I try to load the same particle with 02 command for karate chop, it shows up with glitches. I think it has something with size for particle. Originally shadow ball and karate chop with indexes CO and 9F respectively have different size in table.

In response to your first question, are you adding 8 to both pointers each time? Because you only need to add 8 to the second pointer. I wrote that somewhere from memory.

The glitches you're talking about aren't real glitches, it's because when you follow the 02 command to the offset you need to change the size pointer. If I recall correctly, it's the second to last pointer out of the 18bytes(hex) or 24bytes (dec) that loads the size of the particle. You'll find that it glitches with non-custom particles too if you put say leaf particles into Flamethrower. Just check the sizes of ones of the same index size, look at the pointers they have at the 02 command and adjust those.

Also may I ask what particles you've added, and if you'd want to share them?
If you would like to share them I could add them to either this thread or the 4th gen move resources thread in RnD. I'm probably going to make a shell one soon for Razor Shell and Shell Smash, and then to improve Withdraw.
 

pawell6

The truthseeker
50
Posts
14
Years
Thanks for reply, 11bayerf1 and for the tips about 02 command. I'll try it out and see if it works. But for now yes: I can share those particles. The names of archives are also names of moves, where I used those particles, but you can use them in any move you want.
Note about shell blade: the shell is drawn 5 times, because I had problem with certain 02 command and it worked, when I drew it 5 times.
 
534
Posts
11
Years
  • Age 26
  • Seen Jul 24, 2023
Hello guys!

I just came here to ask, how do I add the particles I just created to some moves I want to create?

Sorry, noob here. :P

Thanks. ^_^
 
Last edited:

MrDollSteak

Formerly known as 11bayerf1
858
Posts
15
Years
Hello guys!

I just came here to ask, how do I add the particles I just created to some moves I want to create?

Sorry, noob here. :P

Thanks. ^_^

In the move animation where you normally put in the particle 00 97 27 or whatever 00 ?? 27/28 command, just use the index of the new move.

Eg. Wood Hammer is 31 28. So in your new move, just place 00 31 28 at the start of the animation.
 

karatekid552

What happens if I push it?....
1,771
Posts
11
Years
Great tutorial man! Just added this to the 649 patch.

----------------------------------------------------
Just a tip for any of you planning to add a lot of new particles at once:

You can use asm to create a table much easier than typing everything in HxD. You don't need to know any asm to do this either. Here:

Code:
.align 2 /*Make sure everything is aligned.*/
.text

main:
.word 0x08960000	/*Your pointer to an image, not reversed!*/
	.hword 0xC00	/*Data size, once again, not reversed.*/
	.byte 0x31	/*Particle number.*/
	.byte 0x28	/*Particle table. Either 27 or 28 like mrdollsteak said.*/

So yeah, just compile this using HackMew's compiler or another ARM compiler and you will have an 8 byte entry. For more entries, you can just repeat this template over and over in the same file:

Code:
.align 2 /*Make sure everything is aligned.*/
.text

main:
.word 0x08XXXXXX	/*Your pointer to an image, not reversed!*/
	.hword 0xXXXX	/*Data size, once again, not reversed.*/
	.byte 0xXX	/*Particle number.*/
	.byte 0xXX	/*Particle table. Either 27 or 28 like mrdollsteak said.*/

Like this:

Code:
.align 2
.text

main:
/*Particle 1*/
.word 0x08XXXXXX
	.hword 0xXXXX
	.byte 0xXX
	.byte 0xXX

/*Particle 2*/
.word 0x08XXXXXX
	.hword 0xXXXX
	.byte 0xXX
	.byte 0xXX

/*Particle 3*/
.word 0x08XXXXXX
	.hword 0xXXXX
	.byte 0xXX
	.byte 0xXX

/*Particle 4*/
.word 0x08XXXXXX
	.hword 0xXXXX
	.byte 0xXX
	.byte 0xXX

/*Particle 5*/
.word 0x08XXXXXX
	.hword 0xXXXX
	.byte 0xXX
	.byte 0xXX

/*et cetera*/
 
252
Posts
10
Years
  • Age 27
  • Seen Jul 6, 2019
This is great!
Since I'm planning on hacking Emerald in the future though, I just want to ask this: How did you guys find the offsets for the table? If I can figure out where the offsets are for emerald, I should be able to do the rest myself.
 

MrDollSteak

Formerly known as 11bayerf1
858
Posts
15
Years
This is great!
Since I'm planning on hacking Emerald in the future though, I just want to ask this: How did you guys find the offsets for the table? If I can figure out where the offsets are for emerald, I should be able to do the rest myself.

If you go into unLZ and find the particles in emerald, just search for the pointers and you should be set.

You have to replace a move with a new one?

tumblr_m6410rmT5P1rwcc6bo1_250.gif
 

Germaniac

Victoria Concordia Crescit
539
Posts
14
Years
It seems that whenever i try to replace 00 XX 27/28 from an animation, it'll mess the particle up (among all the indexes i've tried, the result is always the same except the default unedited one)
 

MrDollSteak

Formerly known as 11bayerf1
858
Posts
15
Years
It seems that whenever i try to replace 00 XX 27/28 from an animation, it'll mess the particle up (among all the indexes i've tried, the result is always the same except the default unedited one)

You also need to change the index in the 02 command.
 

GoGoJJTech

(☞゚ヮ゚)☞ http://GoGoJJTech.com ☜(゚ヮ゚☜)
2,475
Posts
11
Years
How did you find the loader? Just curious, because I want to port this to Ruby.

You should know that porting this to Ruby will be EXTREMELY hard as the coding in Ruby is really bad and unorganized. This is why Fire Red and emerald are further hacked, and have better features implemented by hackers.
 

MrDollSteak

Formerly known as 11bayerf1
858
Posts
15
Years
How did you find the loader? Just curious, because I want to port this to Ruby.

Just mucked around with the debugger, following the routine.
I think it's a pretty stupid system myself, but it works.

Ruby'll probably be difficult, because its routines are very
hard to follow.
 

Danny0317

Fluorite's back, brah
1,067
Posts
10
Years
  • Age 24
  • Seen Nov 19, 2023
Emerald support! That is awesome! Thank you MrDollSteak and HidoranBlaze :D
 
Back
Top