Noxidious Blob,
I have updated ParticleInit() and ParticleCreate().
In the case of the former, the memory allocated has been changed to xDC00. The latter has gone under a more serious rehaul, as the positions of the data have been moved significantly since you made it. I have also changed the order in which the arguments are, because the current way seemed oddly arbitrary. Lastly, I have removed the 'search for an empty slot' bit. If the slot in question is full, the function returns zero and stops. I have backed up the last two changes, in case you had a reason you did what you did, but I don't know.
ParticleLoop is finished but for the collision code.
One last thing is that none of these are in the carrotcode - they are all in my way of writing assembly, which is pretty easy to read, but you'll need to convert it back to apply.