The EMP arc plugin is unchanged from the version in your mod (it's credited in the OP). I could modify it to clamp the arc length to a particular maximum length, though.
I did a bunch of tweaks, like making the smoke actually visible in WeaponDamageSmoke:
Spoiler
package data.scripts.plugins;
import com.fs.starfarer.api.combat.CombatEngineAPI;
import com.fs.starfarer.api.combat.EveryFrameCombatPlugin;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.combat.WeaponAPI;
import com.fs.starfarer.api.combat.WeaponAPI.WeaponSize;
import com.fs.starfarer.api.util.IntervalUtil;
import java.awt.Color;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.lwjgl.util.vector.Vector2f;
public class WeaponDamageSmoke implements EveryFrameCombatPlugin
{
private CombatEngineAPI engine;
private static final Map mag = new HashMap();
static
{
mag.put(WeaponSize.SMALL, 1f);
mag.put(WeaponSize.MEDIUM, 1.5f);
mag.put(WeaponSize.LARGE, 2.5f);
}
private final float smokeSize = 0.8f + 0.4f * (float)Math.random();
public void init(CombatEngineAPI engine)
{
this.engine = engine;
}
private final IntervalUtil interval = new IntervalUtil(0.1f, 0.1f);
public void advance(float amount, List events)
{
if (engine.isPaused()) return;
interval.advance(amount);
if (interval.intervalElapsed())
{
List ships = engine.getShips();
Iterator it = ships.iterator();
while (it.hasNext())
{
ShipAPI ship = (ShipAPI) it.next();
List weapons = ship.getAllWeapons();
Iterator it2 = weapons.iterator();
while (it2.hasNext())
{
WeaponAPI weapon = (WeaponAPI) it2.next();
if(weapon.isDisabled())// -only happening on weapon disable since your explosion stuff is way better anyway
{
float smokeSizeValue = (Float)mag.get(weapon.getSize());
float velX = (float)Math.random() * 10f - 5f;
float velY = (float)Math.sqrt(25f - velX * velX);
if((float)Math.random() >= 0.5f)
{
velY = -velY;
}
engine.addSmokeParticle(weapon.getLocation(), new Vector2f(velX,velY), 40f * this.smokeSize * smokeSizeValue, 0.05f, 4f, new Color(25,25,25,80));// -less transparency here
engine.addSmokeParticle(weapon.getLocation(), new Vector2f(velX,velY), 20f * this.smokeSize * smokeSizeValue, 0.05f, 3f, new Color(90,90,90,80));// -less transparency here
}
}
}
}
}
}
And some changes to the Arc as well:
Spoiler
package data.scripts.plugins;
import com.fs.starfarer.api.combat.CombatEngineAPI;
import com.fs.starfarer.api.combat.DamageType;
import com.fs.starfarer.api.combat.EveryFrameCombatPlugin;
import com.fs.starfarer.api.combat.ShipAPI;
import com.fs.starfarer.api.util.IntervalUtil;
import java.awt.Color;
import java.util.Iterator;
import java.util.List;
import org.lwjgl.util.vector.Vector2f;
public class ArcEffectOnOverload implements EveryFrameCombatPlugin
{
private CombatEngineAPI engine;
public void init(CombatEngineAPI engine) {
this.engine = engine;
}
private IntervalUtil interval = new IntervalUtil(0.25f, 0.5f); //set the time you want the arc to happen
public void advance(float amount, List events)
{
if (engine.isPaused()) {
return;
}
//Advances the interval.
interval.advance(amount);
//When the interval has elapsed...
if (interval.intervalElapsed())
{
List ships = engine.getShips();
Iterator it = ships.iterator();
while (it.hasNext())
{
ShipAPI ship = (ShipAPI) it.next();
if (ship.isHulk()) {
continue;
}
if (ship.getFluxTracker().isOverloaded())
{
Vector2f point = new Vector2f(ship.getLocation());
point.x += (ship.getCollisionRadius() / 3f) * (((float) Math.random() * 2f) - 1);
point.y += (ship.getCollisionRadius() / 3f) * (((float) Math.random() * 2f) - 1);
//spawns one arc.
engine.spawnEmpArc(ship,point,ship,ship,DamageType.OTHER,0f,0f,ship.getCollisionRadius()*2,"hit_shield_beam_loop",12f,new Color(55,170,245,255),new Color(255,255,255,255));// -made its max length equal to the ship diameter
}
}
}
}
}
EDIT: maybe I made the smoke a little bit to visible, need to tone it back down. Still:

This is amazing. Maybe some hull parts flying away and debris would complete this masterpiece.