The code that you need to override and modify is mainly in the advanceTime() and advanceParticle() methods of the ParticleSystem class. I don't remember if we just duplicated the ParticleSystem class code, just to be given more freedom to modify classes, or if we managed with just overriding the ParticleSystem, but it really isn't that tricky.
The particles should be attracted to a given point, but never be allowed to get too close to that point, and keeping the speed above a certain lower threshold. That will make them search out and move around that given attraction point. When the attraction point then is moved, they will accelerate toward that new point.
The intermediate step, where they don't have an attraction point, they can be allowed to wander around the screen like the basic Boids type of behavior.
It might take a bit of work, but get familiar with the Boids code and principle that I linked to above, and dig into the implementation details fearlessly, and I'm sure you can come up with a good solution. 🙂