Welcome gilaseshud!
Not sure if you've checked out r/RoguelikeDev yet, but there are a lot of resources there in general, including our
FAQ on animation systems (also
#2).
For reference, I know a few devs have worked on something similar, or are doing so now, including for example
rm-code (who hangs out in the r/Roguelikes Discord #roguelikedev channel) (
github), and flagsdev, who unfortunately quit his
Reactor 3 project years ago but he uses a nice particle system, too.
Honestly other people can do particles better than I can (my system is pretty hackish and limited compared to "proper" systems) so I don't really talk about the gritty details anywhere. All I did was get my basic understanding from online particle system tutorials, then apply that to the concept of having a finer grid than the main terminal display (so the particles move more smoothly), but even
that concept actually came from X-Com: UFO Defense, based on their
projectile collision implementation. I did projectiles shortly before deciding I needed some way to animate them. So my original purposes here was to simply draw some dots and lines moving around, but then I realized all the possibilities this system could have... and scripts were born...
You could very easily say I lucked into this whole thing
Particles are definitely objects and can collide with other objects, again just like the "LOFTEMPS.DAT" thing linked above. Specific to your questions:
1. Good question, though the answer is "pretty much the same way." All particles are controlled by scripts, the main difference in UI scripts being their particles can leave behind their color and style permanently. My weapon and UI particle scripts are so similar I can swap them between each other's system with little modification! The underlying systems don't have many other differences--they both just manage particle objects using variables like direction, speed, color, lifetime, etc. Other than the ability to leave behind their visible properties, UI particles also have no checks for collision with other objects (so they're even faster).
2. Tens of thousands of particles is enough for my purposes (yeah I get up in those numbers sometimes), though honestly I do my projectiles in the CPU, and if you're making a real-time game you're going to want to do all this rendering stuff on the GPU where it'll be much faster. There you could get
way more particles without issue, it's just all beyond me so I stick to simple stuff. If you're looking to do "hi-res" stuff, GPU (and shaders, I presume) is the way to go. My method works specifically because it's low-res
Answer your questions? Still though, I think you'll be wanted to look for better solutions elsewhere if you're going real-time...