I've recently witnessed several projects move away from BYOND in favor of other languages and engines. They all chose not to use BYOND for various reasons, but one big reason they all shared was BYOND's lack of particle effects. Big, juicy particle effects are a
huge factor in a game's slickness and addictiveness, I think it's something worth giving some thought.
Particle effects can certainly be user-made, but they're always heavily dependent on network conditions and use up valuable bandwidth. If you wanted to do something like show damage text you'll have to create some numbers then update their pixel offset every tick. You would have to do the same with smoke for example and raise its pixel_y every tick while maybe swaying it to the left and right. The thing is, if there are any connection hitches the particles will jump several pixels at a time, ruining the whole effect. In a worst case scenario with a choppy connection you would only see a few "snapshots" out of the entire animation.
What I'd like to see is BYOND add some sort of particle datum to fill this role. It wouldn't have to use true client-side processing, it would just need to offload some of the processing from the server to the client. It would need to take predefined variables and animate particles in a predictable fashion. I have a good idea of how I'd like some of the effects to work, but I'm just one developer so please chime in if you think of something better.
The way I see it, there are three main variables a particle needs. Angle, Speed, and Duration. After being created the particle needs to know which direction to travel in, how fast, and for how long. With these variables you have your basic "line" particle animation. Expanding on that, there would be a Tilt variable which determines how much Angle should be adjusted each tick. With this extra variable you could change a line into a circular shape. From here it gets a little more complicated depending on how advanced the particles should be. If you could stack effects on the same particle you could do something like take a circular particle animation then add a line animation to it, creating a spiral animation. If you took a circle animation then flipped it every 180 degrees you would get an wave animation.
I think the key here is robustness, a few very simple rules which can be combined in different ways would cover most use cases. The particles should be visual-only, they should be super cheap and efficient to use. They wont replace standard projectile effects which have collision properties, but they'll be able to act as the bullet shell flying out of the weapon, the smoke from the barrel, the vapor trail left by the bullet, the blood splatter from the victim, and finally the damage numbers flying over the victim's head.
I don't know if such a thing exists, but the ideal thing here would be using an existing particle engine on top of the client. It would have to be an interpreted language, of course, and I'm not sure how it would handle icons. But in theory, if one could just give a pixel "start" location and a set of commands to pass to the engine, BYOND could have more powerful effects without having to reinvent the wheel.
Is there such a thing?