Fractal Softworks Forum

Please login or register.

Login with username, password and session length

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - shoi

Pages: [1]
Modding Resources / How to make playable fighters
« on: November 17, 2021, 04:37:17 AM »
Generally speaking, there are two approaches to making a pilotable fighter. The easiest method is to simply give a frigate fighter collision. This method has a ton of issues associated with it, however. AI will still evaluate the ship as a frigate, leading to a multitude of odd behaviors:

- Large ships turning to face the fake fighter in lieu of other targets
- Carriers attempting to order bomber strikes against the fake fighter
- Interceptors not prioritizing the fake fighter
- Various fighter-oriented skills/abilities not affecting the fake fighter

On top of this, a ship designed this way will break many mod weapons that have alternate behavior based on the class of ship it is targetting.

The solution to these issues is giving the ship fighter HullSize, but that comes with its own issues. Any ship that retreats with this hullsize will immediately crash the game, and they cannot be ordered with the command UI. On top of that, there is some peculiar behavior in situations when ships like these are the last one s remaining in a battle.

So how do you circumvent these issues? This is the methodology I used in ArmaA:

1.) A hullmod that sets the ship to fighter hullsize during combat. Alters hullsize and recreates effects that don't occur with the use of fighter hullsize, as well as ensuring the ship is properly destroyed/disabled in combat

package data.hullmods;

import com.fs.starfarer.api.combat.*;
import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.combat.ShipAPI.HullSize;
import com.fs.starfarer.api.impl.campaign.ids.HullMods;
import com.fs.starfarer.api.fleet.FleetMemberType;
import com.fs.starfarer.api.fleet.FleetMemberAPI;
import com.fs.starfarer.api.characters.*;

import com.fs.starfarer.api.combat.WeaponAPI.WeaponSize;
import com.fs.starfarer.api.combat.WeaponAPI.WeaponType;
import com.fs.starfarer.api.impl.campaign.ids.Skills;
import com.fs.starfarer.api.fleet.FleetGoal;
import com.fs.starfarer.api.mission.FleetSide;
import com.fs.starfarer.api.util.IntervalUtil;
import com.fs.starfarer.api.util.Misc;
import com.fs.starfarer.api.ui.Alignment;
import com.fs.starfarer.api.ui.TooltipMakerAPI;

import org.lazywizard.lazylib.MathUtils;
import org.lazywizard.lazylib.combat.entities.AnchoredEntity;

import com.fs.starfarer.api.combat.EmpArcEntityAPI;

import data.scripts.util.MagicUI;


import org.lazywizard.lazylib.combat.CombatUtils;
import org.lazywizard.lazylib.CollisionUtils;
import org.lazywizard.lazylib.combat.DefenseUtils;
import org.lwjgl.util.vector.Vector2f;

import java.util.List;
import java.util.ArrayList;
import java.awt.Color;
import java.util.Random;

import data.scripts.util.armaa_utils;
import com.fs.starfarer.api.SettingsAPI;
import com.fs.starfarer.api.combat.listeners.AdvanceableListener;
import com.fs.starfarer.api.combat.listeners.DamageTakenModifier;
import com.fs.starfarer.api.combat.listeners.ApplyDamageResultAPI;
import com.fs.starfarer.api.combat.listeners.DamageListener;
import org.apache.log4j.Logger;
import com.fs.starfarer.api.combat.ShipwideAIFlags;
public class armaa_strikeCraft extends BaseHullMod {

private Color COLOR = new Color(0, 106, 0, 50);
private float DEGRADE_INCREASE_PERCENT = 100f;
public MagicUI ui;
private static final float RETREAT_AREA_SIZE = 2050f;
private IntervalUtil interval = new IntervalUtil(25f,25f);
private IntervalUtil textInterval = new IntervalUtil(8f,8f);
private Color TEXT_COLOR = new Color(55,155,255,255);
private final Color CORE_COLOR = new Color(200, 200, 200);
private final Color FRINGE_COLOR = new Color(255, 10, 10);
private final float Repair = 100, CR = 20; //Hullmod in game description.
private float HPPercent = 0.80f;
private float BaseTimer = .30f;
        private float CRmarker = 0.4f;
private float MISSILE_DAMAGE_THRESHOLD = 200f;
private boolean hasLanded;
public final ArrayList<String> landingLines_Good = new ArrayList<>();
public final ArrayList<String> landingLines_Fair = new ArrayList<>();
public final ArrayList<String> landingLines_Critical = new ArrayList<>();
public final ArrayList<String> landingLines_notPossible = new ArrayList<>();

//If CR is low, but otherwise no major damage
                landingLines_Good.add("\"Welcome aboard, sir.\"");
landingLines_Good.add("\"Looks like you got away pretty clean!\"");
landingLines_Good.add("\"Hopefully, you bag a few more kills today.\"");
landingLines_Good.add("\"All conditions good. Fuselage solid.\"");

//If taken heavy damage, but CR isn't too bad
landingLines_Critical.add("\"Glad you made it back alive, sir.\"");
landingLines_Critical.add("\"Looks like this may be a tough battle, sir.\"");
landingLines_Critical.add("\"Be careful flying while severely damaged. Even anti-air fire could bring you down.\"");

//If heavy damage and low CR

//Tried to find a carrier but could not
landingLines_notPossible.add("\"Dammit, nowhere to land!\"");
landingLines_notPossible.add("\"Could really use somewhere to land right now..\"");
landingLines_notPossible.add("\"Zilch on available carriers. Aborting refit!\"");
landingLines_notPossible.add("\"There's nowhere for me to resupply.\"");

public void applyEffectsBeforeShipCreation(HullSize hullSize, MutableShipStatsAPI stats, String id)
stats.getZeroFluxMinimumFluxLevel().modifyFlat(id, -1f); // -1 means boost never takes effect; 2 means always on
stats.getCRLossPerSecondPercent().modifyPercent(id, DEGRADE_INCREASE_PERCENT);

public void applyEffectsAfterShipCreation(ShipAPI ship, java.lang.String id)
//These listeners are used to get around some of the quirks of using Fighter HullSize

ship.addListener(new StrikeCraftDeathMod(ship));
ship.addListener(new StrikeCraftDamageListener(ship));

public boolean canRetreat(ShipAPI ship)
float mapWidth = Global.getCombatEngine().getMapWidth() / 2f, mapHeight = Global.getCombatEngine().getMapHeight() / 2f;
Vector2f rawLL = new Vector2f(-mapWidth, -mapHeight),rawUR = new Vector2f(mapWidth, mapHeight);
CombatEngineAPI engine = Global.getCombatEngine();
BattleCreationContext context = engine.getContext();
FleetGoal objective = context.getPlayerGoal();
boolean check = false;
Vector2f location = ship.getLocation();
// if player is escaping or I am an enemy
if(objective == FleetGoal.ESCAPE || ship.getOwner() == 1)
//I can retreat at the top of the map
if(location.getY() > rawUR.getY() - RETREAT_AREA_SIZE)
check = true;
//if player is escaping and I am an enemy, or if I am player
if(objective == FleetGoal.ESCAPE && ship.getOwner() == 1 || ship.getOwner() == 0)
//I can retreat at the bottom of the map
if(location.getY() < RETREAT_AREA_SIZE+rawLL.getY())
check = true;
return check;

//determines when AI pilots will return to carrier
public void getPilotPersonality(ShipAPI ship)
String personality = "steady";
if (ship.getCaptain() != null)
PersonAPI pilot = ship.getCaptain();
personality = pilot.getPersonalityAPI().getId().toString();
float dangerLevel = .50f;
switch (personality)
case "steady":
// do nothing, we will use the default
case "reckless":
// we have a death wish
dangerLevel = .30f;
case "aggressive":
dangerLevel = .40f;
case "timid":
dangerLevel = .70f;
case "cautious":
dangerLevel = .60f;



//Since fighters don't normally malfunction we have to simulate it
public void checkMalfChance(ShipAPI ship)
float cr = ship.getCurrentCR();

if(cr < .20f && cr >= 0f )
if(cr == 0f)


ship.getMutableStats().getEngineMalfunctionChance().modifyFlat(ship.getId(), 0.03f*(1f + (1f-cr) ) );
ship.getMutableStats().getWeaponMalfunctionChance().modifyFlat(ship.getId(), 0.03f*(1f + (1f-cr) ) );


public void drawHud(ShipAPI ship)

ship, (ship.getCurrFlux()/ship.getMaxFlux()),

ship, ship.getCurrentCR(),

public void combatAlert(ShipAPI ship, ShipAPI servicee,String context)
switch(context) {
case "overload":
ship.getFluxTracker().showOverloadFloatyIfNeeded("Overloaded!", TEXT_COLOR, 4f, true);

textInterval = new IntervalUtil(100f,100f);

public Color getColorCondition(ShipAPI ship)
return Global.getSettings().getColor("textFriendColor");

public String getDescriptionParam(int index, HullSize hullSize)

if (index == 0) return "" + "activating autopilot";

return null;

private final Color HL=Global.getSettings().getColor("hColor");
    public void addPostDescriptionSection(TooltipMakerAPI tooltip, ShipAPI.HullSize hullSize, ShipAPI ship, float width, boolean isForModSpec)
float pad = 10f;
float padS = 2f;
tooltip.addSectionHeading("Details", Alignment.MID, 10); 
tooltip.addPara("%s " + "Can %s.", pad, Misc.getHighlightColor(), "-", "maneuver over asteroids and other vessels, unless flamed out");
tooltip.addPara("%s " + "Most weapons %s.", padS, Misc.getHighlightColor(), "-", "fire over allied ships");
tooltip.addPara("%s " + "No %s.", padS, Misc.getHighlightColor(), "-", "zero-flux speed bonus");
tooltip.addPara("%s " + "Combat Readiness decreases %s faster.", padS, Misc.getHighlightColor(), "-", (int) DEGRADE_INCREASE_PERCENT + "%");
tooltip.addPara("%s " + "Docking replenishes %s CR and %s armor/hull/ammo.", padS, Misc.getHighlightColor(), "-",(int)CR + "%",(int)Repair+"%");
tooltip.addPara("%s " + "Suffers additional damage from captains with the %s skill.", padS, Misc.getHighlightColor(), "-","Point Defense");
tooltip.addPara("%s " + "Incapable of %s.", padS, Misc.getHighlightColor(), "-","capturing objectives");

        tooltip.addSectionHeading("Refit Time Modifiers", Alignment.MID, 10);       
        if(ship!=null && ship.getVariant()!=null)
float adjustedRate  = 0f;
String weaponName = "";
if(Global.getCombatEngine().getCustomData().get("armaa_strikecraftMissileMalus"+ship.getId()) instanceof Float)
adjustedRate = (float)Global.getCombatEngine().getCustomData().get("armaa_strikecraftMissileMalus"+ship.getId());
weaponName = String.valueOf(Global.getCombatEngine().getCustomData().get("armaa_strikecraftWepName"+ship.getId()));

            if( adjustedRate == 0f){
                        "No refit penalty."

            } else {
                //effect applied
float value = adjustedRate*100.0f;
                String depletion = String.valueOf((int)value)+" percent";
                String weapon = weaponName;
                        "Refit time is increased by "
                        + depletion
                        + " due to the installation of: "
                        + weapon


private void getRefitRate(ShipAPI target)
float adjustedRate  = 0f;
String wepName = "";
List<WeaponAPI> weapons = target.getAllWeapons();
for(WeaponAPI w : weapons)
if(w.getType() == WeaponType.MISSILE)
float damage = w.getDerivedStats().getDamagePerShot();
float penalty = damage/MISSILE_DAMAGE_THRESHOLD;

if(penalty < 1)

penalty = penalty/10f;
float newRate = (float)Math.min(.35f,penalty);
if(newRate > adjustedRate)
adjustedRate = newRate;
wepName = w.getDisplayName();

//Check if any of our weapons are out of ammo.
    private boolean needsReload(ShipAPI target)
boolean check = false;
List<WeaponAPI> weapons = target.getAllWeapons();
for(WeaponAPI w : weapons)
//So long as we have at least one weapon with some ammo left, don't return yet
if(w.getId().equals("armaa_leynosBoostKnuckle") && Global.getCombatEngine().getPlayerShip() != target)
return false;

//code to make sure AI strikecraft don't return if they fire their landing beacon
if(w.getAmmo() < 1 && target == Global.getCombatEngine().getPlayerShip())
check = true;
return check;

else continue;

if(w.usesAmmo() && (w.getAmmo() >= 1 && w.getAmmoPerSecond() == 0) && !(w.getSlot().isDecorative() && !w.getId().equals("armaa_landingBeacon") ))
check = false;


else if(w.usesAmmo() && w.getAmmo() < 1 && !(w.getSlot().isDecorative()))
if(w.getAmmoPerSecond() == 0)
check = true;

return check;

//Check if there are any ships that we can land at
private boolean canRefit(ShipAPI ship)
boolean canRefit = false;

for (ShipAPI carrier : CombatUtils.getShipsWithinRange(ship.getLocation(), 10000.0F))
if(carrier.getOwner() != ship.getOwner() || carrier.isFighter() || carrier.isFrigate())
if(carrier.getNumFighterBays() > 0)
canRefit = true;

return canRefit;

private ShipAPI getNearestCarrier(ShipAPI ship)
ShipAPI potCarrier = null;
float distance = 99999f;
for (ShipAPI carrier : CombatUtils.getShipsWithinRange(ship.getLocation(), 10000.0F))
if(carrier.getOwner() != ship.getOwner() || carrier.isFighter() || carrier.isFrigate() || carrier == ship)
if(carrier.getNumFighterBays() > 0)
if(MathUtils.getDistance(ship, carrier) < distance)
distance = MathUtils.getDistance(ship, carrier);
potCarrier = carrier;

return potCarrier;

private void checkWaypoint(ShipAPI ship)
boolean ally = false;
ally = true;
CombatFleetManagerAPI cfm = Global.getCombatEngine().getFleetManager(ship.getOwner());
CombatTaskManagerAPI ctm = cfm.getTaskManager(ally);

if(Global.getCombatEngine().getCustomData().get("armaa_strikecraft_hasWaypoint"+ship.getId()) instanceof Boolean)
if((Boolean)Global.getCombatEngine().getCustomData().get("armaa_strikecraft_hasWaypoint"+ship.getId()) == true)
if(Global.getCombatEngine().getCustomData().get("armaa_strikecraft_refit_timer"+ship.getId()) instanceof Float)
float f = (Float)Global.getCombatEngine().getCustomData().get("armaa_strikecraft_refit_timer"+ship.getId());

if(f  > 200f)
ctm.orderSearchAndDestroy(cfm.getDeployedFleetMember(ship), false);


private void retreatToRefit(ShipAPI ship)
boolean ally = false;
CombatFleetManagerAPI cfm = Global.getCombatEngine().getFleetManager(ship.getOwner());


if(Global.getCombatEngine().getCustomData().get("armaa_strikecraft_hasWaypoint"+ship.getId()) instanceof Boolean)
if((Boolean)Global.getCombatEngine().getCustomData().get("armaa_strikecraft_hasWaypoint"+ship.getId()) == true)

ally = true;

ShipAPI carrier = getNearestCarrier(ship);

CombatTaskManagerAPI ctm = cfm.getTaskManager(ally);

DeployedFleetMemberAPI dfm = cfm.getDeployedFleetMember(ship);
if(Global.getCombatEngine().isEntityInPlay(carrier) == false)

//if we have an assignment to escort something
if(ctm.getAssignmentFor(ship) != null && ctm.getAssignmentFor(ship).getType() == CombatAssignmentType.RALLY_TASK_FORCE)
//do nothing
if(ctm.getAssignmentFor(ship) != null)
if(ship.getHullSize() == HullSize.FRIGATE)
CombatFleetManagerAPI.AssignmentInfo assign = ctm.createAssignment(CombatAssignmentType.RALLY_TASK_FORCE,cfm.createWaypoint(carrier.getLocation(),ally),false);

    public void advanceInCombat(ShipAPI ship, float amount)

if(Global.getCombatEngine() != null)
if(!(Global.getCombatEngine().getCustomData().get("armaa_strikecraftLanded"+ship.getId()) instanceof Boolean))

if(Global.getCombatEngine().getCustomData().get("armaa_strikecraftPilot"+ship.getId()) instanceof Float == false)

HPPercent = (float)Global.getCombatEngine().getCustomData().get("armaa_strikecraftPilot"+ship.getId());
if(Global.getCombatEngine().getCustomData().get("armaa_strikecraft_refit_timer"+ship.getId()) instanceof Float)
float f = (Float) Global.getCombatEngine().getCustomData().get("armaa_strikecraft_refit_timer"+ship.getId());

if(ship.getCollisionClass() == CollisionClass.SHIP)

boolean player = ship == Global.getCombatEngine().getPlayerShip();

CombatUIAPI ui = Global.getCombatEngine().getCombatUI();


if(ship.getCurrentCR() <= 0.4f && Global.getCombatEngine().getCombatUI() != null && ship.getOriginalOwner() != -1)
if(ship.getOwner() == 0 && !ship.isAlly())
if(!(Global.getCombatEngine().getCustomData().get("armaa_strikecraftCRWarning"+ship.getId()) instanceof Boolean))
Global.getCombatEngine().getCombatUI().addMessage(1,Global.getSettings().getColor("textFriendColor"),ship.getName() + "'s ",Color.yellow, "performance is degrading due to combat stresses.");
Global.getSoundPlayer().playUISound("cr_allied_critical", 1f, 1f);

float CurrentHull = ship.getHitpoints();
float MaxHull = ship.getMaxHitpoints();
float CurrentCR = ship.getCurrentCR();
boolean needsrefit = false;
if (((CurrentHull <= MaxHull * HPPercent) || (CurrentCR < CRmarker) || (needsReload(ship))) && canRefit(ship))
if((player && !Global.getCombatEngine().isUIAutopilotOn() && ship.getShipAI() == null))

if (player)
Global.getCombatEngine().maintainStatusForPlayerShip("AceSystem1", "graphics/ui/icons/icon_repair_refit.png","/ - WARNING - /", "REFIT / REARM NEEDED( PRESS " + Global.getSettings().getControlStringForEnumName("C2_TOGGLE_AUTOPILOT") + " )" ,true);

if((!player && canRefit(ship)) || (player && !Global.getCombatEngine().isUIAutopilotOn()))
needsrefit  = true;

armaa_combat_docking_AI DockingAI = new armaa_combat_docking_AI(ship);
if(ship.controlsLocked() && !ship.getShipAI().needsRefit())
if(!ship.isFinishedLanding() && getNearestCarrier(ship) != null && MathUtils.getDistance(ship, getNearestCarrier(ship)) < 1500f)
//Do init -once-
if(Global.getCombatEngine().getCustomData().get("armaa_strikecraftLanded"+ship.getId()) instanceof Boolean)
boolean hasLanded = (boolean)Global.getCombatEngine().getCustomData().get("armaa_strikecraftLanded"+ship.getId());
if(player && !hasLanded && ship.isFinishedLanding())
Random rand = new Random();
String txt =  landingLines_Critical.get(rand.nextInt(landingLines_Critical.size()));
if(ship.getHullLevel() > 0.45f)
txt =  landingLines_Good.get(rand.nextInt(landingLines_Good.size()));
Vector2f texLoc;
if(DockingAI.getCarrier() != null)
texLoc = DockingAI.getCarrier().getLocation();
texLoc = ship.getLocation();
if(Math.random() <= 35f)
ship.getFluxTracker().showOverloadFloatyIfNeeded(txt, Color.white, 2f, true);
Global.getSoundPlayer().playSound("ui_noise_static", 1f, 1f, texLoc,new Vector2f());



float shipRadius = armaa_utils.effectiveRadius(ship);
if(Math.random() < 0.05f)
for (int i = 0; i < 1; i++)

Vector2f targetPoint = MathUtils.getRandomPointInCircle(ship.getLocation(), (shipRadius * 0.75f + 15f) * 1f);
Vector2f anchorPoint = MathUtils.getRandomPointInCircle(ship.getLocation(), shipRadius);
AnchoredEntity anchor = new AnchoredEntity(ship, anchorPoint);
float thickness = (float) Math.sqrt(((shipRadius * 0.025f + 5f) * 1f) * MathUtils.getRandomNumberInRange(0.75f, 1.25f)) * 3f;
Color coreColor = new Color(TEXT_COLOR.getRed(), TEXT_COLOR.getGreen(), TEXT_COLOR.getBlue(), 255);
EmpArcEntityAPI arc = Global.getCombatEngine().spawnEmpArcPierceShields(ship, targetPoint, anchor, anchor, DamageType.ENERGY,
0f, 0f, shipRadius, null, thickness, new Color(155,50,250,150), coreColor);
Global.getSoundPlayer().playSound("emp_loop", 1f, .8f, ship.getLocation(), new Vector2f());

else textInterval.advance(0.65f);

if(ui != null)
if(canRetreat(ship) || ship.getTravelDrive().isOn() || needsrefit)


if(ship.getOriginalOwner() == -1 || Global.getCombatEngine().isCombatOver() || Global.getCombatEngine().isPaused())


public static class StrikeCraftDamageListener implements DamageListener {
ShipAPI ship;

public StrikeCraftDamageListener(ShipAPI ship)
this.ship = ship;

public void reportDamageApplied(Object source, CombatEntityAPI target, ApplyDamageResultAPI result)
float totalDamage = result.getDamageToHull() + result.getTotalDamageToArmor();
if(source instanceof WeaponAPI)
WeaponAPI wep = (WeaponAPI)source;
ShipAPI ship = (ShipAPI) target;

//We dont have the armor to tank beams like larger ships, back off if we start to take too much hull/armor damage
if(wep.isBeam() && totalDamage > 20)
ShipwideAIFlags flags = ship.getAIFlags();

//Damage floaties since they aren't created for fighter hullsize
if(ship.getHullSize() == HullSize.FIGHTER && Global.getCombatEngine().getPlayerShip() == ship)
float shipRadius = armaa_utils.effectiveRadius(ship);
Vector2f anchorPoint = MathUtils.getRandomPointInCircle(ship.getLocation(), shipRadius);
Global.getCombatEngine().addFloatingDamageText(anchorPoint, result.getTotalDamageToArmor(), Color.yellow, ship, (CombatEntityAPI)source);
Global.getCombatEngine().addFloatingDamageText(anchorPoint, result.getDamageToHull(),, ship, (CombatEntityAPI)source);
Global.getCombatEngine().addFloatingDamageText(anchorPoint, result.getDamageToShields(), new Color(125,125,200,255), ship, (CombatEntityAPI)source);

//This listener ensures we die properly
public static class StrikeCraftDeathMod implements DamageTakenModifier, AdvanceableListener
protected ShipAPI ship;
public StrikeCraftDeathMod(ShipAPI ship) {
this.ship = ship;

public void advance(float amount)


public String modifyDamageTaken(Object param,CombatEntityAPI target, DamageAPI damage, Vector2f point, boolean shieldHit)

if(!(target instanceof ShipAPI))
return null;

return null;
float multiplier = 1f;
multiplier = 0.5f;

multiplier = 2f;

multiplier = 0.25f;
ShipAPI s = (ShipAPI) target;
float damageVal = damage.getDamage();
float armor = DefenseUtils.getArmorValue(s,point);
if(damageVal*(damageVal/(armor+Math.max(damageVal*0.05,damageVal))) > s.getHitpoints())

String id = "strikecraft_death";
return id;

2.) A baseeveryframecombatplugin that prevents combat from prematurely ending if only ships with the above hullmod remain. also prevents these ships being assigned to capture objectives as well as forcibly resetting AI for any ships that end up using Fighter AI for some reason(as this renders them unresponsive)

Code: armaa_EinhanderHaxPlugin
package data.scripts.plugins;

import com.fs.starfarer.api.Global;
import com.fs.starfarer.api.combat.*;
import com.fs.starfarer.api.mission.FleetSide;
import com.fs.starfarer.api.input.InputEventAPI;
import java.util.ArrayList;
import com.fs.starfarer.api.combat.ShipAPI.HullSize;
import java.util.List;
import com.fs.starfarer.api.combat.CombatFleetManagerAPI.*;
import com.fs.starfarer.api.util.IntervalUtil;
import org.lazywizard.lazylib.combat.CombatUtils;
import org.lazywizard.lazylib.CollisionUtils;
import org.lwjgl.util.vector.Vector2f;
import data.scripts.util.MagicRender;
import java.awt.Color;
import com.fs.starfarer.api.combat.MissileAPI;

//import org.lazywizard.console.commands.ToggleAI;

//this script manages things that otherwise wouldn't be possible via hullmod; primarily ensuring fake fighters being only ship left on field doesnt end combat
//and ensuring its always selectable in UI
public class armaa_EinhanderHaxPlugin extends BaseEveryFrameCombatPlugin
    protected CombatEngineAPI engine;
protected List<ShipAPI> cataphrachtii = new ArrayList<ShipAPI>();
protected List<ShipAPI> toRemove = new ArrayList<ShipAPI>();
protected CombatTaskManagerAPI ctm;
protected CombatFleetManagerAPI cfm;
protected CombatUIAPI ui;
private String origPersonality = "steady";
boolean canEnd = false;

    public void advance(float amount, List<InputEventAPI> events)
if(engine == null)

cfm = engine.getFleetManager(FleetSide.PLAYER);
ctm = cfm.getTaskManager(false);
ui = engine.getCombatUI();

for (MissileAPI missile : engine.getMissiles())
if(missile.getWeapon() != null)
if(missile.isFizzling() || missile.isFading()){
if(MagicRender.screenCheck(0.25f, missile.getLocation())){
engine.addSmoothParticle(missile.getLocation(), new Vector2f(), 50, 0.5f, 0.25f,;
engine.addHitParticle(missile.getLocation(), new Vector2f(), 50, 1f, 0.1f, new Color(250,192,92,255));
else if(missile.getWeapon().getId().equals("armaa_sprigganTorso"))
if(missile.isFizzling() || missile.isFading()){
if(MagicRender.screenCheck(0.25f, missile.getLocation())){
engine.addSmoothParticle(missile.getLocation(), new Vector2f(), 50, 0.5f, 0.15f,;
engine.addHitParticle(missile.getLocation(), new Vector2f(), 50, 1f, 0.25f, new Color(250,192,250,255));

else continue;

        for (ShipAPI ship : engine.getShips())

else continue;

if(cataphrachtii.isEmpty() || engine.isEnemyInFullRetreat() || engine.isCombatOver() || engine.getFleetManager(0).getTaskManager(false).isInFullRetreat())
canEnd = true;
//Global.getCombatEngine().maintainStatusForPlayerShip("debug", "graphics/ui/icons/icon_repair_refit.png","Retreat OK" ,"" ,true);


if(!engine.isEnemyInFullRetreat() || !engine.getFleetManager(0).getTaskManager(false).isInFullRetreat())
for(ShipAPI mech : cataphrachtii)
if(mech.getShipAI() instanceof || mech.getShipAI() == null && mech != engine.getPlayerShip())

if(ui != null)
if(mech.getOwner() == 0)
CombatFleetManagerAPI cfm = Global.getCombatEngine().getFleetManager(mech.getOwner());
CombatTaskManagerAPI ctm = cfm.getTaskManager(false);
if(ctm.getAssignmentFor(mech) != null )
if(ctm.getAssignmentFor(mech).getType() == CombatAssignmentType.CAPTURE ||
ctm.getAssignmentFor(mech).getType() == CombatAssignmentType.ASSAULT ||
ctm.getAssignmentFor(mech).getType() == CombatAssignmentType.CONTROL)
if(mech.getHullSize() == HullSize.FRIGATE)
DeployedFleetMemberAPI dfm = cfm.getDeployedFleetMember(mech);
Global.getCombatEngine().getCombatUI().addMessage(1,Global.getSettings().getColor("textFriendColor"),mech.getName(),, " is incapable of capturing objectives due to being a strikecraft.");
Global.getSoundPlayer().playUISound("cr_allied_critical", 0.5f, 1f);

if(mech.getHullSize() != HullSize.FRIGATE)

if(mech == null || mech.isRetreating())
// should no longer be needed, but leaving it here just in case
if(mech.getHitpoints() <= 0f || mech.isHulk() || mech.getOwner() == 100)

    public void init(CombatEngineAPI engine)
        this.engine = engine;
3.) An AI script for landing on carriers and simulating repairs/reload(I use a modified version of Harupea's Combat Docking Module)

This approach covers most oddities that can arise for consistent behavior, the exception being when the ship is in their retreat area(to prevent crashes when retreating) and when the command UI is open(to allow ordering the ship), where they are temporarily switched back to the frigate HullSize.

Quirks of Fighter Hullsize
- Frigates and up generally won't prioritize these ships unless there is nothing else around, or they generate enough "heat". Frigates and Destroyers are more likely to do so, while larger ships seem to go down this route when panicking, otherwise leaving things to their autofire weapons.
- Capitals will never try to face these ships, but will happily blast them should they enter the firing arc of their manual-firing weapons and autofiring weapons will attack as normally.
- Interceptors will specifically target as if a normal fighter
- Damage received will be modified by any fighter PD bonuses the damage happens to have
- Ship is treated as a Frigate for the purpose of skill bonuses
- AI will not use any strike weapon to attack these ships, unless they panic

Bug Reports & Support / Overloaded fighters stay overloaded
« on: April 07, 2021, 09:40:11 PM »
Any fighter with shields raised will permanenetly overload once their flux hits max. I have reproduced this on several other fighters, but the easiest reproducable vanilla way would probably be:

1.) Equip Xyphos
2.) enable dev mode and take control of one
3.) raise shields and fly into enemy fire

Sorry if this was already reported, I didn't see any thread.

Basically, getting a mission from a contact for a Combat Extraction can't be finished because the station needs to be destroyed first for you to raid...but destroying the station destroys the market, which makes you immediately fail the mission.


Mod Requirements:

Machina Void Shipyards - for more strikecraft

Other mods featuring Strikecraft:
Gundam UC Mod
Vanilla Armatura
Mayasuran Fighter Expansion
Epta Consortium
Roider Armatura
Starfighter Intrastellar Modification Program (SIMP) - (Available on Unoffical discord only)
Plunderin Strikecraft - (Available on Unoffical discord only)
Unofficial Diable Avonics Addon - By Pep
UNSC Strikecraft

I. Summary:

This mod primarily is centered around a framework allowing playable fighters. The objective was simulate the behavior of normal fighters as closely as possible while still making them viable for normal gameplay. Additionally, the mod adds a few weapons as well as a hullmod that assigns characters that gradually level up over time to your fighter wings.

Strikecraft blur the line between frigates and fighters. Generally glass cannons, they possess many of the advantages fighters have, while benefiting from skills that affect frigates. However, they are extremely vulnerable to enemy interceptors as well as point defenses, have poor shielding(if any), and rely on carriers to be used effectively.


The WINGCOM Suite allows you to build an elite squadron of strikecraft pilots serving under an officer that improve and gain skills over time.

Eventually, they can even be promotoed into fully-fledged Officers!

These squadrons are highly customizable. Squadron names, character portraits, and even callsigns can all be modified!

Radio chatter appears from them in combat, and they will even chat amongst themselves.

  • Multiple fighter wings with that yield a Ground Support Bonus when equipped to carriers
  • Fourteen pilotable mechs, and three pilotable fighters
  • One new star system + market

(Some) Pilotable craft examples:

Broadsword (AA)
Improved version of the ubiquitous fighter. Equipped with rudimentary makeshift shield, as well as a pair of Swarmer Missiles on top of two small ballistic hardpoints, this version of the Broadsword also commands its own wing of standard Broadsword fighters.

Warthog - AA
Thicker armor, and reinforced hull, as well as a fifty percent increase in potential firepower. Commands it's own wing of standard Warthogs.

Xyphos - AA
One of the most advanced fighters available within the Sector. The support oriented Ion Beam has been swapped out for an Ion Pulser. Two range-boosting sensor drones combined with it's attached Xyphos wing and still functional PD capabilities make the AA variant a powerful escort, as well as extremely dangerous.

Aleste - Strikecraft

Laser Sword included.

Einhänder - Strikecraft

For the angst-filled protagonist.
System: Offense Mode

Dramatically reduces firerate and disables defense systems, but drastically increases weapon damage

Leynos - Strikecraft

This is Red Leader, over.
System: Amalgamate Feed

Increases the performance of all wing members based off the number that are still active.

Garegga - Frigate

Gameplay - HELMUT
Altagrave - Destroyer

Vaguely humanoid destroyer with a PD oriented Burst laser built into the head, and a very bursty arm weapon that can be further enhanced for burstiness with expanded magazines.

Mounts: 1x Small Universal, 1x Small Hybrid, 1x Medium Synergy
Modules: 2x Leg Modules, 1x Backpack Module(System: Low-Grade EMP Emitter)

System: KARMA

Redirects tracking missiles against enemies, and absorbs projectiles for a scaling buff to Weapon Rate of Fire as well as a Weapon Flux Cost Reduction. Once the karma gauge is maxed an explosion is triggered that damages any enemies within 300 su and generates kinetic projectiles that home in on the target.

and more...

PAQ - Potentially Asked Questions
-What does the fake_fighter tag do?
This tag is mostly for modder use. It's purpose is if modders want to distinguish actual fighters from the ones this mod adds for weapon effect/AI purposes

-What does the independent_of_carrier tag do?
Some ships had this tag for testing purposes, but it's a fighter wing only tag that has no effect

-What does the no_wingcom_docking tag do?
This tag isn't used currently

-What does the strikecraft_medium tag do?
This tag prevents strikecraft from landing on destroyers.

-What does the strikecraft_large tag do?
This tag prevents strikecraft from landing on destroyers and cruisers.

-What does the armaa_traveldrive do?
This simulates the "travel drive" of base fighters, with a reduced max speed. It's main purpose is simulating strikecraft launching from ships directly when applicable.

.ship stuffs:
-What's Landing Override?
This was used initially to manually enable landing before targeting was an option. It's only still around for save compat

-What's the difference between armaa_strikeCraftFrig and strikeCraft?
armaa_strikeCraftFrig changes hullsize to frigate, while strikeCraft hullmod contains the core functionality for strikecraft (in other words, strikeCraftFrig is just an addon combined with strikeCraft that changes hullsize)

-How do I make built-in fighters land/do not land on the strikecraft?
Fighters will never land on strikecraft, and there currently isnt anyway for them to be able to.

-How do I make my strikecraft be able/not be able to land on carriers?
Strikecraft can always land on at least one form of ship with a bay by either targetting a valid ship or activating autopilot,  depending on the tags used. There currently isnt any way to prevent them from landing completely.

-How do I make my strikecraft always/never deploy from carriers?
Strikecraft will always try to deploy from a carrier if using armaa_travelDrive. To have them never deploy, use the standard travel drive.
Mod Compatibility
- If you are one of the nerds that has a HullSize for any combat effects, you can easily avert any NPEs by checking the hullsize of the variant instead of the ship itself. This is the approach vanilla uses, so the mod operates under that assumption. You can also use this if you need to distinguish the ships from actual fighters for any reason.
- For edge cases, Einhänder uses a fake_fighter tag to identify it's nature. This idea was devised by MesoTroniK to resolve some targeting and fuze logic bugs with several THI scripted weapons and how they interact with frigates that setHullSize to fighter via script at all times, instead of most of the time, for the future THI update. If you want to ensure certain abilities and weapons affect Einhander or any ship like it properly, you can simply add a condition checking for this tag. For that reason, if you do make a ship similar to it, it'd be a good idea to add the "fake_fighter" tag to the pertinent vessels in ship_data.csv! Here is an example snippet of how you'd use it:)

    public static boolean isFighterOrDrone(ShipAPI ship)
        return ship.isFighter() || ship.isDrone() || isFakeFighter(ship);


    public static boolean isFakeFighter(ShipAPI ship)
        return ship.getHullSpec().hasTag("fake_fighter");
- Slight tweaks to VX Custom sprite, added arm recoil anim(s)
- balance tweaks
   - reduced HP and flux stats slightly for all mechs
   - switched hullsize to frigate (except for gunhaz)
   - removed expanded magazine/misslerack restriction
- Refactored launch script

- Fixed Valkazard being locked in an invisible/uncontrollable state if docking while under player control

- Adusted refit logic so that ships with a loadout consisting of weapons with finite ammo will immediately attempt to resupply when exhausted instead of flying around uselessly

- Fixed ships with strikecraft_large && strikecraft_medium still being able to land on banned ship sizes

- Fixed some weirdness with the takeoff script

- Fixed debug text appearing when AI strikecraft land

- Fixed bug where AI would linger over carrier instead of docking (?)

= New Features =
- AI strikecraft(enemies and NPC allies) with WINGCOM and an officer piloting will have pilots assigned to their fighters like the player
   - Level varies based on the officers level + a bit of rng
   - Squad names are (currently) just (parent ship name) + Squadron

- New ship, VX Custom

- Added two tags: strikecraft_medium and strikecraft_large
   - ships with strikecraft_medium can only land on cruisers and capitals
   - ships with strikecraft_large can only land on capitals

= Bugfixes / QoL =
- AI strikecraft should launch from their own carriers properly

- Strikecraft should no longer 'clown car' from carriers
   - Basically, the number of strikecraft that can deploy from carriers is equal to the number valid launch bays on the field at time of deployment
   - Once all slots are taken remaining strikecraft will deploy from edge like normal ships

- Fixed pilotable kouto never appearing for sale
- Fixed strikecraft not being affected by CR Reduction / Reduced PPT in coronas/event horizon
- Fixed visual bug with Valkazard Combat Stims appearing disabled on hullmod, even when recreational drugs present
- Fixed bug where WINGCOM fighters would land on parent ship with no native bays if no other carriers were present instead of retreating
- Fixed strikecraft being locked in an invisible/uncontrollable state if player tried ordering one while docked

- Watchdog sprite revised by Selkie
   - Removed 2 medium turrets
   - Added WINGCOM
   - Adjusted AI to better attempt to keep distance

- Garegga sprite revised by Selkie

- Curvy Laser subprojectiles are now interceptable targets (versus only the parent projectile being interceptable)
   - fixed outdated description text stating impact damage was 4500, should be 3000

- fixed flickering arrow bug on command ui for strikecraft
- restricted curvy laser use for remnant to a specific variant that appears infrequently
- Misc changes/fixes
- Fixed crash caused by carriers that somehow dont have launchbays, for real this time
   - Previously, fighters with wingcom installed on parent ship would get increased RoF + damage bonus. the damage bonus has been removed.

- Fixed huge supply consumption by salvage gunhazard
- Fixed description bug with valkazard
- Valkazard
   - High Intensity Beam
   - Max Ammo: 8
   - Ammo/Sec : 0.13->0
   - Burst Delay : 4->20
- Added some more dialogue text
- Fixed another potential crash caused by carriers that somehow don't have launchbays
- fixed crash caused by transferring command to wingcom ship using officer that never was assigned a wingcom ship before
- Fix bug with aleste swordsman variant
- Fix bug with hullmod order on Leynos
- Leynos Railgun Flux Cost: 225->90 (2.25 ->.9)
   - EMP Damage: 100-> 175
- fixed typo with mobile armor tag
- fixed watchdog weapon swapping
- adjusted watchdog system AI
   - Should be a bit smarter with using it
- Fixed incorrect display of elite skills for wingcom pilots
- Added small chance for wingcom hullmod to appear for sale on submarket @ meshan
- Increased engagement range reduction for wingcom by 10% for all hullsizes
- Strikecraft can no longer use fighter clamps from Roider Union
- Enemy ships with WINGCOM hullmod that have a squadron will now use the correct colors to identify them instead of friendly/player colors (this case shouldn't happen in normal gameplay outside of mod shenanigans / traitor command ... for now)


- fix special strings (such as faction names) not properly appearing during chatter

- Added clarification that wingcom needs crewed fighters to function

- Added info for if player has no squadrons on intel screen

- added null checks for every dumb thing possible

-fix damage crash


- fixed crash by transferring command into ship with a wingcom officer
- Lowered valkazard CR Deployment cost to 30%
- raised threat level for: einhander, einhander P, valkazard
   - einhander, einhander P, valkazard can now capture points
- Fixed bug with AI strikecraft locking up if carrier was destroyed just before it finished landing

- fixed crash with null carrier
- fixed various crash inducing NPEs
- fixed strikecraft instantly repairing hull and armor by docking and immediately undocking
- new ship: Einhänder Plus (technically already released, but now with an actual desc.)
   - Einhänder with almost all built-ins removed in favor of modular slots

- fixed einhander crash with dummy weapon

- Blocked Front Shield Emitter from being installed on Valkazard's Counter Shield Torso
- Fixed invisible launch bug, probably
   - strikecraft should properly mirror the angle of the bay launched from instead of always launching at 90 degrees
- Strikecraft distribution should be a bit less heavily weighted on a single carrier on deploy
- Fixed laser blade not properly accounting for bonus beam/energy weapon damage outside of EWM
- Can now dock at carriers by targetting them and activating autopilot
- Fixed NPE caused by WINGCOM chatter (hopefully)
- Increased break chance for all strikecraft (0.5->0.7)

- Added functionality for custom ground support values: ground_support_custom in modSettings
- Reduced Ground Support Bonus for all pilotable cataphracts
   - Generic support(hullId unspecified): 15->5
   - Einhänder: 25->11
   - Aleste: 15->8
   - Leynos: 15->8
   - Valkazard: 25->15
   - Pilot level(if any) is added to ground support value
- Cataphracts can be damaged during raid deployments
   - Base chance to incur damage scales by ratio of attacker vs defender strength
   - Higher attack strength and pilot level reduces actual damage received, while higher defender strength increases it

- Fixed crash form mousing over wingcom
- Fixed crash from mousing over Silversword
- Fixed crash caused by enemy fleet having a null faction(fleet commander?) or something
- Fixed crash for nonexistent portrait for hvb
- Fixed case sensitivity issue with a sprite
- Curvy Laser
   - Reduced number of projectiles generated by 50% to improve performance
   - Proj Speed: 525->650

- New Ship, Valkazard
   - Added new start for starting w/ (ArmaA(Pirates)) (w/ super cool special snowflake nex start text by timid! wowee)
   - Can be found via exploration otherwise
- New Ship, Broadsword(AA)
- New Ship, Warthog(AA)
- New Ship, Kouto E-Type
   - 8 DP
   - fleet support, grants damage buff to random number of enemy ships based on ECM rating
   - Gun is modular hybrid slot, but since I can't alter weapon muzzle effects done """incorrectly""" it only use weapons on a whitelist by default
      - if you want to slap anything you want on it, can edit this in modsettings by adding "ALL" to the whitelist

- New fighter, Valken(P)
   - Carries Anti-Ship Sword, HE weapon with limited uses
- New Fighter, Prodromos Battle Armor
   - Fragile but effective anti-fighter/PD unit

- Advanced Optics(AA)
   - Can no longer be built in
   - Reduced Range: 100->50
   - OP: 5-> 3
- Removed debug text that appeared when using Curvy Laser

-Laser Blade(s)
   - Increased on-hit knockback. Knockback effect is produced so long as blades are in contact with objects (so spamming blades on top of things should push you further back than just hitting a ship with the end of the blade. Hitting small objects such as fighters and missiles should produce no knockback, usually)

   - Can now be used on standard carriers
   - Ships that shouldn't be able to equip, but somehow have it anyway, will have their fighters launched from offscreen/other carriers as other wingcom units do
      - This is determined based on weither the ship inherently has fighter bays or not
   - optimized code a bit
   - Externalized strings to modSettings
   - added dialog lines for remaining vanilla fighters
   - added dialog lines for a few mod fighters
      - Additional lines can be added with magiclibs modsettings by using "special_wing_lines" map (look at armaa's mod settings for an example)
   - Removed glow/jitter effect
   - wingmen will now use different dialog based on the character's 'voice'
   - wingmen will appear in battle as a pilot of their respective fighter
      - can also gain new skills over time and level up
   - Adjusted font colors for more uniformity with normal hullmods
   - In smaller battles where ships deploy closer to the center of the map, wingmen will now spawn a few thousand SU away instead of from deployment zone if no carrier is present
        - Max stat bonus conferred by relationship reduced to 30% (was 75% for defensive and 37% for offensive)
   - Added support for multiple wings
   - Implemented GUI for changing squad name/callsigns. Heavily based off of a butchered carcass of Nexerelin's Insurance GUI. Thanks, Histi!
   - Added random little blurbs that squadrons will blather on deployment
   - Fixed ships with WINGCOM being considered for relationship modifiers even if they did not participate in combat
   - Fixed retreated ships with WINGCOM not being considered for relationship modifiers
   - Added fluff text for characters with 'villain' voice
   - Added fluff text for characters with 'soldier' voice
   - Wingcom will now check for hullId first before resorting to baseHullId (for fighter skins)

- Strikecraft:
   - AI navigating back to carrier has been improved
   - Will now launch from valid carriers (if any) on deployment
   - Carriers can only supply as many Strikecraft as the number of fighter bays they possess (I.E. a Condor can resupply only two strikecraft at once, as opposed to an unlimited number)
   - Doubled carrier replacement rate decrease while rearming.
   - Fixed Strikecraft changing to Frigate HullSize if they took damage that frame
      - Should fix inconsistency with some onhit effects that used hullsize, fighter damage bonuses from skills, etc
   - Fixed shield damage not being displayed
   - Slightly increased retreat area 2000->2050 in attempt to fix retreat CTD caused by AI attempting to retreat while fighter hullsize
   - Hull and armor now gradually restore over time on carrier
   - Carrier Refit can now be cancelled at any time
      - HP and Armor replenish over time in carrier, so not an all or nothing decision
      - PPT and Ammo are only restored if full refit time is spent
   - added modSettings for custom configuration of refit penalties for (ideally) mod weapons and hullmods, and squadron chatter

   - Aleste
      - Reduced damage by 17%
      - No longer deals EMP damage
      - Increase Flux Cost: 350 f/s

- Aleste(S)
   - Shield Efficiency: 0.8->1
   - DP: 6->7
- Xyphos(AA)
   - DP: 5->7

- Leynos
   - DP: 6->7
   - Added Rugged Construction Hullmod
   - Now uses the better(?) Vanilla Damper AI implementation
- Gunhazard
   - DP: 3->4
   - Added Rugged Construction Hullmod

- Revised wings so each LPC has more clearly defined role
   - Valken-X: HE Fighter
   - Kouto: KE Fighter
   - Aleste: Obligatory Superfighter
   - Bihander: Obligatory Superfighter^2
   - Valken: Fodder
   - Prodromos: Interceptor
   - Gallant: KE Bomber
   - Ilorin: HE Bomber

- added legs decos to Aleste, Kouto, Valken-X, Leynos,Valken

- Fixed torso tracking problem with valkazard

- fixed missing description for valkazard system

- Revised Sprite for Kouto, Valken X

- Reduced value of Cataphract & Advanced Cataphract BP package

- Removed submarket rep/transponder requirement for gamlin

- fixed bug where player was not properly referred to using gender appropriate title(based on portrait) when landing

- fixed crashed caused by destroying altagrave module with no weapons assigned

- fixed squadron members not being generated unless wingcom hullmod was moused over

juno. mk iii
   - dmg/s: 900->800
   - chargedown: 0.5s -> 1s
   -Corrected negative modifyPercent for Weapon Flux Cost Mod
   - Replaced ear killing shotgun sound for Altagrave Ex
   - Altagrave Ex: Plasma Jets -> Havoc Drive
   - Deco Left Arm: -> Laser Blade XL
   - Added two small missile mounts
      - Mounts will be destroyed/rendered unusable if backpack module is lost

- Valken-eX
   - Replacement Time: 10->13
   - OP: 10->11
   - Removed Ion Cannon (High Delay)
   - Chaingun: chargedown:1->0.5
      -Damage: 50->25
      -Flux/Shot: 0->10
      -Burst Size: 5->6
   - Laser Blade:
      -Damage: 350->400
      - Range: 45->60
   System (Right Click): Overboost -> Havoc Drive

- Kouto
   - Revised loadout for anti-shield role

- Aleste
   - Replaced Stake Driver with Rynex Pulse Rifle
   - CLAW Drone: Increased arc to 360 deg, Ship System: Temporal Shell

-Pila Drone(Built-in)
   - Removed Phase Damper special system
   - New System: Temporal Shell

- fixed outdated description for kouto

- Altagrave can now swap between Vajra and Grenade Launcher
   - Also overcompensates with a large laser blade, may remove before actual release tho
- Watchdog can now swap between Hellbore and Gauss Cannon
   - Siege Mode: Shield Damage Reduction: 50%->10%

- Einhander:
   - Drone weapon is now equipped directly on the main ship
   - Increased OP: 30->39
   - Max damage bonus from ship system: 70%->25%

New Ship: Leynos - 6DP / Leynos(RS) - 10DP
-Same schtick as the Aleste, but more durable + heavier weapons
-Damper Field in lieu of standard shield

New Ship: Xyphos(AA) - 4DP
- more offensively tuned Xyphos with an attached Xyphos wing
- Effectively a mobile support wing

New Ship: Gunhazard - 3DP
- Live fast, die faster
- Very mobile with good armor rating, but extremely low HP

New Ship: Watchdog - 10DP
- Fire Support; poor mobility and flux stats but enhanced range and firepower for its class

New Hullmod: WINGCOM Suite
- Adds fighter bay with 70% range reduction, increased replacement rate of 70%,and increased refit time of 25%
- Instead of launching from the host ship, new fighters either arrive from the deployment zone or from nearby carrier    returned to for refit
- If piloted by officer, winning battles improves effectiveness of the wing, while being disabled, destroyed, or losing has chance to reduce it
- Wing members have a small chance to be promoted, akin to vanilla officer promotion event

-Added Nex Mercenary company

-Only Einhander,Garegga, and altagrave were known to indies + PL, added remaining hulls
-Slightly bumped up frequency so they show up ocassionaly instead of once every few cycles

   -Fixed issue that caused custom Aleste/Einhander .skins to crash due to invalid ground support bonus by checking base hull instead

- Damage dealt popup/numbers should now properly display when taking damage
- Fixed bug where game would crash if player took control of enemy strikecraft and then retreated with it (.....somehow)
- Strikecraft will now always be disabled/destroyed after combat if hull is fully depleted, instead of a 50% chance of not needing to be recovered
- Fixed bug where landing ship would only choose bay 0 to land at
- Replacement Time reduction when refitting now occurs during refit time instead of after
- Fixed bug where combat would not end if an allied / enemy strikecraft were on the field after full retreat on the player's side
- Trimmed description to be more concise and less fluffy
- Strikecraft will (should?) no longer attempt to fly directly through enemy fleet to reach a carrier

-Altagrave's will purge all modules once the core ship's HP decreases below 55%
   - This is a (AI) buff and should improve survivability somewhat
   - AMWS for all head variants DMG: 350->400, IGNORES_FLARES, adjusted offset for better accuracy
   - Karma ship system now benefits from Systems Expertise
   - Karma Seekers:
      - Reduced number of projectiles generated
      -Launch Speed: 1500-> 800
      -Proj Speed: 1000->700
        - Fixed Ear killing shotgun sound used by altagrave ex
   - Default Altagrave's main weapon can no longer be intercepted by PD
      - Chargedown: 0.12 -> 0.2
      - Adjusted firing FX
-Removed ECCM from Ilorin
-Ilorin Rocket Speed: 150->50
-Burst Size: 4->8 (now fires entire clip at once)

Valken X:
- Removed Vulcan Cannon
- Laser Blade DMG: 125->200

- swapped light mortar for light assault gun
- System now affects all weapons
- armor: whatever it was before -> 25
- adjusted sprite yet again

- Revised weapon loadout
- Wing Size: 2->1

- Changed name of playable version to Aleste(S) to better distinguish playable and LPC version
- increased flux capacity
-Heavy Rynex Laser will no longer target fighters
-Dispersal Mortar will immediately detonate in close proximity to enemies
-Added Laser Blade as an option for right arm
-Added SCTR-40 Minigun as an option for right arm
-Laser Blade trails reduced to a more reasonable width/length
-Fixed Laser Blade not doing additional emp damage on hit
-Fixed Laser Blade damage not scaling with energy weapon mastery bonus
-Fixed bug where laser blade trails from different ships would merge into eldritch map spanning megatrails

-Added landing beacon to Einhander
-Fixed alternating weapon bug with Garegga's Pulse laser
- Aleste:
   -Laser Blade:
      -Laser Blade attacks are now swings instead of stabs; should generally be easier to connect with
      -First strike with Laser Blade now slightly knocks back the user
      -Added Hit and swing fx
      - Burst Damage is dealt on first strike
- Stopped recordbreaker from always being in the title screen battles
- Added more details on what fighter-related skills apply to Strikecraft to Strikecraft hmod desc
- Strikecraft will no longer kill themselves if the carrier they are on retreats
   - will retreat as well
- Fixed crash caused by Strikecraft retreating while on carrier

- Refit rate should be properly clamped and no longer go below 30%
- Max Refit Time Penalty (w/ missiles equipped) 30%->35%
- Refitting at carrier now reduces that carriers replacement rate
- Reversed LPC removal from indies/persean/pirates
- Adjusted CR bar color to match native UI
- Added combat UI notification on CR loss for strikecraft when CR <= 40%
- adjusted starship legends hull damage impact on rating for aleste & einhander to account for repairs to hull
-added minor turret angle offsets to all weapons - should improve accuracy esp. against smaller objects like fighters and missiles

-DP: 8->11
-Phase Cost & Upkeep: 0.08->0.1
-Phase Damper Cooldown: 2->3
-Cr/Deployment ->40%
-Fixed bug where permanent time dilation would be applied when player-piloted einhander was destroyed in certain scenarios

-DP: 8->9

-Added glow sprite to pulse lasers
-System: Plasma Jets -> Silversword
-Fixed incorrect turret arcs

-Added glow sprite to Rynex Pulse Rifle
-DP: 5->6
-Ground Support Bonus: 25->15
-Stake Driver:
-Burst Size: 2->6
-Ammo: I forgot->18
-Stake Driver proj is now bit more visually prominent
-Minor fx/sfx tweaks to Laser Blade

-Added Overload FX + SFX for Strikecraft
-Fixed missing desc for exceliza grenade launcher
-Increased LS-99 Turn Rate
-Added missing desc for microburn
-Fixed aleste's microburn having 2 charges when it should have 3
- Added FX + SFX for Aleste's microburn


-Removed LPCs from vanilla factions since there's no easy way to control their usage in fleets
-Scavengers still have access

- Fixed missing description for Gallant LPC

- Cataphract(Hullmod)
   -Reduced Ground Support Bonus: 30->25
   -Ships with hullmod can no longer install Advanced Optics

- Aleste
   - Equipped missiles with per shot damage > 200 will now increase refit time(Multiplied by number of barrels for LINKED, by 2 for DUAL_LINKED, and by the number of missiles for MIRVs), up to 30%
   - AIleste equipped with LS-99 will actively attempt to use the melee weapon with ...varying degrees of success (Thanks Sinosauropteryx!)
   - Reduced flux cost of Dispersal Grenade

- Fixed hulls not being procurable in nex
- Soft removal of Einhander (LPC version)
- Soft removal of Recordbreaker
- added missing bp to nex starts; adjusted starting ships for carrier(small) start
- Lowered indie reputation requirement for meshan submarket to favorable (25->10)
- Submarket now only sells armaa ships, but stock has been reduced by 25%
- All blueprints should now be discoverable through exploration, or added to the pool of BPs the historian offers

   -Aleste(pilotable) - 5 DP
   -Mechanically similar to Einhänder
   -More modular, less flashy
   -2x universal hardpoints
   -Revamped sprite to more closely resemble high-tech,minor variations between pilotable and lpc version
   -left and right built-ins can be swapped
      - Laser Blade,
      - Stake Driver,
      - Pulse Rifle,
      - Plasma Flamer,
      - Heavy Pulse Rifle
      - Dispersal Grenade

----balance changes---

   -fixed shotgun bug with altagrave[ex]
   -Increased DP: 15->18
   -Increased price to better match ships around DP value
   -removed emp emitter from modules
   -increased bullet HP for Vajra: 300->450

-Valken X:
   -renamed LS-99 to LS-2001
   -DPS: 300->125

   -Wing Size: 4->3
   -IR Pulse Laser(High Delay)->IR Pulse Laser
   -Fixed weird deco weapon spacing
   -minor sprite adjustments

   -minor sprite adjustments
   -Sol rocket pod: 15 ammo->8; burst size: 15->4
   -removed fast missile racks

   - Refit Time: 20->30
   - Fix inordinately long refit time caused by landing with very little hull remaining
   - AI will return to carrier to resupply only when all weapon ammo is exhausted, previously would return as soon as one weapon was empty

   - Reduced scale of some on-hit effects
   - Armor: 300->275
   - DP: 6->8
   - Added High Maintenance Hullmod

-Crushed the elusive FighterAI bug/crash, hopefully once and for all
-fixed bad logic that allowed Einhänder to land on enemy carriers
-add temporary workaround to vanilla's infinite overload bug affecting fighters

- fixed crash caused by case sensitivity for linux (probably?)

   - Flux Caps: 1100->1000
   - Flux Diss: 175->200
   - Juno Mk. I
      -Burst Size: 8->10
   - AS Glaive:
      - DMG: 450->500
   - Will now opt for the nearest viable carrier to land on instead of traveling to one across the map
   - Can now land on station hangar modules
   - If friendly carrier with launch bays is targetted before activating autopilot, will attempt to use it to refit
   - Minimum refit rate can no longer reach lower threshold than 30%
   - Added random chatter text based on condition when landing(only if flagship)

- Reduced Trihänder spam in Tri-Tachyon fleets and markets
- Garegga:
   Ship System:
      -Weapon RoF: +30%->+40%
   -Pulse Laser Flux/Shot: 100->80

-Fixed up some descs, courtesy of Avanitia

-Added Altagrave(s) and Garegga to known hulls for the independent faction, at reduced frequency

-Garegga now can appear on black market
-Garegga + Trihander indevo support
-removed sound files that were in jar for some reason

   - DP: 6->7
   - Added slightly different after-action raid report based on if player is piloting an Einhänder or not
   - Fixed extra 1 DP being deducted on deployment
   -Replaced Repair/Rearm drone system with a modified version of Harupea's Combat Docking Module(
      -AIhänder will attempt to resupply at various thresholds determined by pilot personality type
      -Activating autopilot on player-controlled einhander will have it return to carrier if:
         - CR <= 40% or
         - HP <= 50%
         - non-ammo regen weapon exhausted
      - Once landed, 'assigned' the carrier as a mothership and will attempt to return to it in the future
      - Refit restores 20% CR and fully replenishes hp, armor, ammo, and PPT
      - Refit time is proportional to the carrier's replacement rate, with reduced rates increasing refit time
      - Destruction of the carrier will also destroy Einhänder
   -AI use should be much more viable now
   -Autopilot is immediately engaged upon opening Command UI
      -Should prevent crashes caused by null AI pointer/AIhänder ceasing to move with
      autopilot enabled
   -Juno Mk. I:
      -Range: 500->600
      -Cooldown: 1.6->1
      -Altered enhanced Juno projectile/fx to more closely resemble the other weapons in the Juno fam
      -110 DP/SHOT -> 85 DP/SHOT;
      -FLUX/SHOT-> 55->85
   -Can now use Ship System without disabling Phase Damper Field
   -Phase Damper Field
      -Should now benefit from Phase Mastery
      -Time Dilation: 55%->85%
      -DMG Resistance: 35%->15%
      -Damage Dealt: +0% ->-15% when active
   -Energy Surge
      - Max Damage Bonus: 100%->70%
      - Can now use with defensive systems
   -AIhänder without any explicit orders assigned will retreat to nearest carrier with highest CR for repairs if HP or CR drops below a certain threshold
      -70% for cautious+timid
      -50% for steady
      -30% for aggressive
      -10% for reckless

- Juno Mk. II Damage/Sec: 1500->1050

-Set Altagrave/garegga to priorityhulls at the special market on New Meshan, which should generally increase their frequency there
-Fix Altagrave Karma desc to include details on both variants
-Fix Altagrave[G] desc
-Fix Altagrave[C] desc
-Increase Flux cap/diss for Altagrave[G]
- minor hullmod description fixes
- fixed occurence where Einhänder would suffer an infinite overload
-added magiclib and lazylib as dependencies in modinfo.json

-  Trihänder Pulse Lasers reflect the statistics of .95a pulse laser
- fixed crash caused by emp arc with Einhander Experimental

- 0.95a compat
- removed some glib stuff temporarily
- removed some drone stuff since it was causing a crash
- Fixed Altagrave[G]'s getting [EX]'s backpack and EX being CC'd in missing modules. / [C] backpack module missing drones

-Fixed crash caused by duplicate class name

      -  14 OP, single wing with two support drones
      -  +20 ground bonus to equipped carrier
      -  Primarily energy+frag DPS with some KE and HE
      -  15 op
      -  wingsize: 2 single shot sparkly beam bomber
      - cannot move or turn during firing sequence, very vulnerable
      - Dakka
      - 1x small energy, 2x small composites, 2x built-ins
      - Short-Range
      - 8 DP
      - Tri-tachyon modified Garegga
      - Single wing - 25 OP
      - +30 ground bonus to equipped carrier
      - only can be obtained by finding its blueprint through normal exploration
      - only here in prep for some 0.95a modding features, may be altered considerably

-Added two new Altagrave variants, revised [C] variant
      -Exceliza Grenade Launcher, 300 shield radius, Plasma Jets as ship system
      -upsized central small hybrid to medium energy
      - HVB, appears at level 30 + certain fleet strength
      - Syrinx MRM
      - Backpack Module: Active Flare Launcher
      - Karma[C]: Grants all friendly ships(except itself) within 1000 SU a degrading time dilation bonus based on  the total of the karma gauge. At full charge, the bonus granted is 15%, and maximum duration is 20 seconds.

-Added 3 new nex starts for base Altagrave, Altagrave[G], and Garegga

-Reduced LPC frequency chance in fleets across the board by 40-60% depending on rarity
-Fixed LPCs never appearing in PL markets/fleets due to a incorrectly named faction file
-Implemented MagicSettings missile resistance modsetting for Altagrave's system
-Changed portrait for meshan admin + fixed missing parameters in cataphract defense base planet condition
-armaa lpcs should now appear in persean league markets/fleets

- nerfed paintjob saturation by 40%
- minor gfx changes to make head more prominent/distinguishable
-Removed omni shields
-HP -> 575->850
- Light Mortar -> Ion Cannon(High Delay)
- Assault Chaingun(Fighter) DMG -> 45->60
-LS-99 MOONLIGHT Range: 35->45; Cooldown: .33->1
   -interruptibleBurst -> true
   -beamFireOnlyOnFullCharge -> true
   -empDamage: 500->50

-Removed Delicate Machinery
-AS Glaive Ammo:4->10
-Hullmods can no longer be equipped to the dummy drone (these had no effect, so nothing was lost)
- Pila Drone system: Teleporter->Temporal Shell(2x dilation)

- Ship System: Phase Damper Field -> None
   - Can actually be killed before firing beam now

- Engagement Range: 2000 -> 4000
- Plasma Gatling:
   - Range: 500->600
   - Damage: 15->30
   - Recoil:
      -Min: 15->0
      -Max: 30->10

   - Damage Type: ENERGY-> FRAG
-Shield Radius: 70->360

-There appears to be a bug with ships that use modules that makes them much more aggressive than they should normally be. This seemingly is fixed in 0.9.5a, but if you want to prevent this behavior from occuring with AItagrave's, destroying their back module with a console command or assigning them a ship to escort resolves the issue.
-For this reason, modules no longer confer any statistical bonus/malus to speed/manuverability.

-Fixed weird interaction with shipsystem and missiles using custom AI
-DP: 14->15
-Shield Radius -> 120
-Seeker Damage 250->150
-HP -> 2500->3000
-Flux Cap -> 5750-> 5850
-Armor -> 450 -> 375
-Leg modules: system -> low-grade EMP
-Backpack Module: System-> Pila UWS
-Modules vent & overload with core

-Cleaned up some descriptions courtesy of Avanitia
-Increased hull frequency for Altagrave on New Meshan's market by 15%


-Reduced Valken engagement range to standard 4k su

-Reduced Valken wing size from 5->4

-Increased Ilorin engagement range to 4k su, speed 110->140, OP->16

-Increased Juno Mk. II DPS from 400->1.5k

-Increased DP: 12->14
-Modules no longer consume additional fleet points on deployment

-Added BACK_OFF AI flag to encourage AI altagrave's to back down in certain scenarios. It's not 100% reliable but should improve survivability somewhat. AI gonna AI

-Previouly ship system would absorb up to 2000 points of damage, and when maxing out gauge generate 10 projectiles worth 2.5k damage in total, even if the amount absorbed exceeded the threshold.

-Adjusted system to generate a scaling number of seeker projectiles based off the total amount of damage absorbed, up to 5,000 at 20 projectiles. The default amount generated has been decreased to 8 from 10 to equate to the base threshold of absorbed damage, however.

-added small trail fx to seeker projectiles.

-Altagrave's built in hullmod is now properly hidden and wont be found as loot

-Attempted to improve AI performance with Altagrave:
   -Generally speaking, Alta is flux hungry, and wont fire main gun after a certain threshold
   -AI cannot perceive that modules are important to its survival, very often eats hits to the side of modules that easily could have been avoided by a player as a result

   -Converted Front Shield to Omni Shield
      -Omni Shield doesnt extend to some parts of the legs, for now this is intentional
   -Increased collision radius 67->100
   -increased shield radius-> 67->90
   -base flux: 5500->5700
   -base dissipation: 350->360
   -Shield Efficiency: 0.7->0.66
   -Vajra flux/shot: 120->110

-cr recovery %/day: 8%->6%


-removed random folder in mission folder

-Super Ship start: Replaced Altagrave and Condor with Altagrave[C] and Wayfarer
   -Differences between the two are mostly superficial, [C] has built-in Op Center and is more suitable as a flag

-Added Ground Support bonus for new fighter wings. Non-cataphract fighters were conferring additional bonus if a single cataphract wing was added, this was fixed.

-Added Juno Mk. III, a modular medium fire support beam cannon. Available on New Meshan, may need further tweaks

-Standard Altagrave now has very low chance of appearing in scavenger fleets

-Adjusted base variant auto groups

-Karma Seekers: Damage type to Kinetic
   -reverted damage back to 250 from 200

-Added additional small hybrid mount; increased OP by 5

-Altagrave should be less inclined to suicidally charge at things 2x its size or into swarms of enemies, not 100% what caused this issue, may have some relation to weapon loadout

-Added normal maps for gLib support and shadow effect to some turrets/decos

-Limb animation now slightly affected by turning/strafing left or right

-new head sprite for Altagrave[C]

   -Drastically reduced tracking effect of Vajra, should be much easier to hit smaller ships, both under player and AI control
   -Increased projectile speed: 950->1000

-increased armor on all modules to match parent hull armor: 400->450
   - Won't do much against heavy hits, but will help mitigate issue with getting papercut to death by fighters

-swapped active flare launcher to Low-Grade EMP Emitter (Same system as Recordbreaker) on backpack module

-Modules now mirror the hullmods applied to the parent ship

-Increased OP of all modules to 1000 to prevent any unintended behavior caused by hullmods that readd themselves in certain scenarios

-Added hullmod describing modules and their effects

-Altagrave[C] would never spawn in markets with modules, is now a seperate hull instead of being skin-based [Used exact same ID for the hull that was used by the skin file, so save compatible; tested and confirmed myself]

Armor: 45->30
HP: 450->400

-Fixed deco weapon being listed in Armaments
-Plasma Blade was set at an ammo of 1, removed ammo limitation

-Altered Juno Mk. II for better visual consistency with other Juno family weapons

-Removed Omni-Shields from Altagrave's legs, increased armor by 200, HP by 200
-Gave Altagrave[C] a Default Role so that it actually appears in markets
-All projectiles weren't properly being tallied when absorbed, corrected issue
-Karma increases much faster, increased threshold as a result: 1000->2000
-Reduced amount of projectiles generated from Karma: 15->10
-Altagrave System projectiles DMG: 250->200

New Ship: Altagrave
- 12DP with modules that increase speed while they are intact;
- 1x Medium Synergy, 1x Small Universal
- 2x built-ins
      energy-based projectile weapon with some missile characteristics, has slight homing capability, can be intercepted
- System: K.A.R.M.A
   -Absorbing projectiles increases "Enlightenment"
   -Enlightenment grants a scaling bonus to Weapon RoF and Flux Cost Reduction as damage absorbed increases, up to 30%
   -Exceeding/reaching max karma generates an explosion that damages anything within 300 su and flings homing projectiles
      -Projectiles will home in on selected target after a few second delay, otherwise random target is chosen
   -Bonus is lost once karma is maxed.

New Mission: Battle of Meshan 1A9
- Survive against waves of redacted

-Added start with Altagrave
-Added basic BP to all starts

New Wing: Valken-X - 10 OP
System: Overboost
   - brief, but significant increase to speed + manuverability for 1 second
- Assault Chaingun(F), 50% potency of original ACG fired in 5 shot bursts
- LS-99 MOONLIGHT, short-range plasma blade
- Wing Size: 2
- Not very effective vs shields, but overboost + the LS-99 makes it lethal at close range and an effective dogfighter

New Wing: Recordbreaker - 10 OP
- Fast interceptor with weak EMP emitter suited for anti-fighter/missile and escort. Best paired with other fighter types
- Wing Size: 2

-New Star System: Gamlin
-New Meshan, Size 5 Colony
-Has special submarket accesible at high indie rep that sells all cataphracts, rarely Einhander or Altagrave will appear

-Adjusted spawn rate of all wings, they should actually appear occassionally in various fleets

- fixed fx bug caused during interaction with some approlight systems
- fixed crash caused when running simulation during armaa mission with Einhänder
- Phase Damper Field Time Dilation: 60%->55%
- Phase Damper Field Beam Resistance: 50%->55%
- Phase Damper Field Base Resistance: 40%->35%
- Vulcan Cannon Turn Rate: 90 -> 75
- AS Glaive Range was 650, when should have been 550->550
- Einhander receives damage bonus as flux level increases when using ship system. Exceeding flux leads to overload
- Repair Drones will now always deploy so long as there are no enemies within 2000 su

-General all-around buffs. They should be more effective overall

-Fixed bug that prevented valken from ever spawning in fleets, or appearing in simulator
HP: 300->450
Armor: 15->30
Flux Dissipation:60->80

DR-79 Plasma Gatling: 10 -> 15 DMG
   -Bullet Size reduced by 50%

Overshield granted 10x damage resistance instead of 5x, corrected to proper value
Increased flux stats for overall improved shield efficiency
Reduced Seeker flare count to 1
HP-> 425-> 500
Armor -> 50-> 35
Max Flux -> 700
Dissipation ->  150
Refit Time: 25->15

OP: 12->14
Crew Size: 1->3

-removed Juno. Mk III from drop table

-added armaa_ prefix to all ship systems

Known Bugs:
- Einhänder damage weighting with Starship Legends gets weird in some scenarios, will be fixed in next version of legends

- Fixed damage bug with Starship Legends (
- Added Nex Carrier(small) start
- Can now immediately issue orders to Einhänder instead of having to open Command UI and unpausing
- Fixed "bug" where Einhänder being the last living friendly remaining would result in an instant loss

Cataphract Complement:
-Each wing now grants a different ground support bonus:
Valken, Kouto: 4
Bihander: 16
Ilorin: 12

-Phase Damper Field Time Dilation: 50%->60%
-Phase Damper Field Beam Resistance: 40%->50%
-Beam Coat Beam Resistance: 35%->40%
-Beam Coat tooltip stated total stacking beam resistance was 77% when it was in reality around 60%, corrected to reflect new values. Max resistance is 70%
-With these changes beam heavy enemies and burst PD beams shouldn't be as insurmountable, while remaining a threat
-AS Glaive size: Medium->Small, this will give it a more accurate (and reduced weapon health) HP for its physical size
-Increased texture scroll speed on AS Glaive's trail
-Added role for Homing Laser
-Vulcan Cannon: Chargedown: .1 -> 0.05, Damage: 35->25, Range: 350->250; Replaced projectile for vanilla vulcan_shot

-Added System: Overshield
-Shield Radius: 90->75
-Blank Torso Weapon-> Seeker Flares

-Wing Size: 3->5
-IR Pulse Laser: Energy/Shot: 0->50
-Flux Dissipation: 25->60
-Adjusted sprite
-Vulcan Cannon: Chargedown: .1 -> 0.05, replaced projectile for vanilla vulcan_shot
-Refit Time: 10->9
-Changed Engine Style from lowtech to midline

-Rocket Pod Ammo: 9->15
-Added System: Fast Missile Racks
-Minor description tweaks
-replaced midline tags with low tech

-small fx adjustment on Einhänder + Bihänder
-Add system desc for P-Damper Field (Bihander ver)
-Fix bug where Pila would never equipped their assigned weapon

-Fixed crash when deploying AI-controlled Einhänder in certain order
-Fixed crash when deploying Einhänder without any weapons assigned to the Pila

-Increase turn rate 100->110
Offense Mode: Speed+Manuverability:40%->50%
Corrected system desc; stated 30% dmg increase, replaced with more accurate description
Juno DMG: 100->110;
DP: 7 -> 6
-Juno hit fx with system active reduced in intensity
-misc fx adjustments
- AI controlled Einhänder will autonomously return to carrier at low CR
-System: Damper-> Production P-Damper
-HP: 700
-Armor: 150->200
Replaced Micromissile -> Homing Laser
-Added fake_fighter tag to Einhänder, which will resolve some targeting and fuze logic bugs with several THI scripted weapons and how they interact with frigates that setHullSize to fighter via script. (Note to other mods that might do similar things, please add the "fake_fighter" tag to the pertinent vessels in ship_data.csv! credit to MesoTroniK )
-Fixed crash with Einhänder caused by attempting to retreat from the top of the map during 'escape' battles
-Fixed bug that wiped faction blueprints from Tritachyon/Independent fleets
-Adjusted rarity of all fighters so they are less common in NPC fleets
-Added compatibility for some IndEvo features ( i think )

=== Einhänder ===
-Synergy Mount has been axed. It just looks too weird with some combos. I'll probably make an alternate version with mounts replacing some built-ins
-Added built-in drone wing with customizable small hybrid mount as replacement.
-Can equip weapons up to 9OP, but flux reserves might not be enough for it to actually fire them all (I.E) you can actually mount an AM blaster on the drone, but it can't actually fire. I'll add hard restrictions to this later
-Added Phase Field hullmod
==-New System-==
-Phase Charge->Offense Mode
Damage Bonus: 35%->30%
Speed Bonus: 65%->40%
Manuverability Bonus: 50%->40%
Reduce RoF by 50%
Increases Recoil by 100%
replaces Juno standard projectile with enhanced alternative that does 135 Energy Damage and 200 EMP Damage with arc chance
-small sprite alterations

OP: 35->30
HP: 700->750
-Reduced armor from 310->300.
-Increased turn accel 115 -> 180
-Top Speed: 160->165
-CR to Deploy: 16%->20%
-CR loss per second: .25%->.20%
-Turn rate: 115 -> 120
-Increased decel 120->170
-Increased accel 170->190
-Max Flux: 1200->1100
-Mass:  75-> 60
-AS Glaive Range: 500->550; Damage: 400->450; Ammo: 4->6
-Juno DMG 90 -> 100
-Juno EMP DMG 60->0
-Juno Chargeup 1.05-> 0.525
-Juno Chargedown 2->1.6
-Juno Min Spread 0->3
-Juno Max Spread 10->30
-Burst size: 9->8

-Homing Laser bonus damage chance: 50%->25%
-Burst size: 4->2

=== Valken ===
-Increased speed to 230
-Hull: 550>300
-Armor: 40->15
-Wing Size: 3->4
- Pulse Laser DMG: 50->30
- Light Mortar Ammo: 0-> 15
- Replacement Time: 8-> 12

=== Kouto ===
Shield Efficiency 75%->100%
Blazer Rifle -> DR-79 Gatling Plasma
=== Bihänder ===
- New Sprite
- OP: 12->14
- Wing Size: 2->1
- AP Javelin -> Juno Mk. II: Burst Charge Beam
= Light Machine Gun -> Micro Rail Rifle
- added new sfx + fx

-Added new wing: Ilorin
- High HP and Armor
- Slow speed & manuverability
- Armed with annihilator Rocket Pod & Autocannon

-Added new wing: Pila UWS
Short-range drone wing used by the Einhänder

-Cataphract Complement now grants +4 bonus for every cataphract wing
-Fixed bug where ships without the CARRIER tag would not receive Cataphract Complement hullmod
-Added info on ammo resupply drone for strikecraft hullmod

-Any carrier with at least 1 Cataphract wing will now get the hullmod "cataphract complement" that grants small ground support bonus, applied when visiting markets

=== Einhänder ===
-can start active vent during phase instead of having to exit phase first, and then venting.

- Increased OP from 30 -> 35

- Added small SYNERGY hardpoint

- Decreased armor from 325 -> 310.

- Increased Juno's per shot damage from 83 -> 100
- Burst size decreased 16->9
- EMP Damage Increased 30->60
- Juno now has a 25% chance to create EMP arcs on impact that do 3x EMP damage(150) and 1/2 its per shot damage(50) in energy
- Chargedown decreased 3->2

-AS Javelin renamed -> AS Glaive ((II has weapon with very similar name))
- Damage decreased from 500 -> 400
- Ammo decreased from 10 -> 4
- chargedown decreased from 6->3
- EMP Damage increased 0 -> 200
- No longer fully reloads between engagements

-Homing Laser-
- Chargedown decreased from 12->10

- Limited Ammo weapons can be reloaded by returning to carrier, if the weapons max ammo count is at least 2 (no spamming reapers ): )

- Einhänder has been fully switched to fighter hullsize, outside of a few edge cases. Gameplay wise this means it **should** suffer or benefit from all the same effects that fighters do, including custom ones (so long as that effect checks if a ship is a **fighter** and not checking its **fighter_wing**), including custom ones, and AI will react and evaluate it as as a fighter also. Thanks to MesoTronIk for bringing this to my attention.

-Fighter Doctrine Lv2 bonus now applies to the Einhänder as well

=== Valken ===
-Fixed severed Valken arms showing up in markets.

-Replaced Valken's AAF system with new system: GU-14 Firebolt Feeder
+25% Damage, +25% ROF, -10% Flux Cost for ballistics


-initial release
Known Issues:

What's Next:

- idk lol

MesoTroniK Consult, some SFX
Tartiflette - Scripting
Harupea - Initial Docking System
Nia Tahl - Scripting, trail patterns
Dark.Revenant - Scripting
Avanitia, Randall, Phantasia, Karleen, Finn, Unit9461,TheSoldier,Caymon Joestar, Selkie - Feedback / Testing
Some of these may be modifications of the original work.

General Discussion / are colonies too profitable?
« on: January 22, 2020, 07:20:27 PM »
Getting the colony up in the first part is difficult because of the inital investment and the time you need to baby sit it before it can defend itself, but once you have a battlestation up and patrols flying around it (or even less if you are friendly with pirate), a good colony pretty much trivializes everything  else?

as soon as my single, 125%ish hazard colony hit size 5 or 6 it was pulling in 250k a month with a good governor.

im deliberately not trying to min max and can only imagine how much money you could make if you seriously tried colony building on the best worlds spamming AI cores.

I do have a good governor on the planet, and a synchotron, so I guess I don't know if this is normal or intended, or if I just got lucky with rng on the synchotron + governor to be so profitable. Is it normal to make so much money so fast?

General Discussion / From a lore perspective, isn't it weird...
« on: August 08, 2019, 06:33:29 PM »
How easily a random smuggler/mercenary can build a massive, flourishing empire over the course of a few cycles? All it takes is flying in the opposite direction of the core worlds for around a month and you are on your way to finding entire troves of ancient tech and terran worlds no one has managed to find over the course of 200 years

Now i'm not griping about this and I understand that it works this way mostly for gameplay reasons, but I started thinking about it when I was reading another thread where someone was griping why no one takes your faction "seriously" when you literally spring up out of nowhere.From what I recall going through the lore, things are steadily declining in the sector so this always struck me as peculiar. Does anyone else agree? Have I just been playing SS too long and it just seems easy to me?

Suggestions / Player Character counts as (1) crew member
« on: July 27, 2017, 06:23:08 PM »
this the nittiest of picks, but shouldn't player count as a crew member?

Pages: [1]