This section describes how we created the visual effects for almost all skills and equipment.
This does NOT mean it is the only way and we'd like to encourage those interested in creating better and more varied visual effects for those features.
As is customary, we'll use an example. In this case we'll use Spg2\SpecialEffect\RepairBots\activation.sal and it's prudent to have the script opened up in Notepad++ for a better overview.

THE THEORY

The Repair bots activation visual effect uses a simple principle:

Create desired models, import them etc.

Decide on the wanted animation (usually a series of simple animations like repositioning, rotation, scaling, transparency...)

Write a script to animate the whole thing, model by model, in the correct sequence

Similarly to explosions, this kind of scripts look more complex than they really are.

GETTING THE MODELS ASSEMBLED AND READY FOR USAGE

It's always good practice to know in advance what you want to do with the individual models, how to animate them etc.
A bit of planning, but useful in the long run. Makes the next step easier.

Link all the models you'll be using into the same assembly (*.asb). This will make it easier to manipulate them later.
Our general procedure was to have all such models scaled to size 1. This makes it easier to calculate resizing via scripts later.

Add the assembly as a new entry in the FreeModel.wds. You'll be referencing this database from the animation script. It CANNOT work in any other way!

The initial segment does some basic size calculations to make the script reusable regardless of the ship size the effect is seen on/around.
This is where it comes in handy to have all effect models scaled to 1.0.

We primarily set initial values to the individual models in the assembly. Their size, transparency, position, whatever...
What is needed depends on what the animation will look like. A very short pause is set, so the next block doesn't override the initial state.

To wrap it all up, we fade out each model. Notice the entire animation script,
when all interpolations and pauses are combined, takes less time to play out than the initially set Lifetime of the Created assembly ;).