Ok, I fixed the issue. Turns out I was returning the wrong thing (again…) from newcopy. I'm still going with using pointers everywhere, since for large structs it could increase the maximum number of structs I can use (if we want to use a ton of particles…)