The collision code did not scale at all well to dealing with lots of collision objects, so wrote a uniform grid check on top of it. Debugging this took a lot longer than expected. Still will need tweaking, depending on the game scenarios, but seems to handle about 1000 particles with any number of colliders now at around 20 fps. Anyone know a good Python profiler? Also added mouse-picking code.