Edit: actually, upon closer inspection of the code, there's something like a 1/10000 chance that a duplicate sub-effect gets chosen (it's not entirely pruned, the selection chance just gets set to a really small number), so maybe you just got really unlucky?
I suspected that RNG Jesus might have blessed me. 
Ah, unfortunately, upon *even further* inspection, if every possible stat effect has been selected before, then everything counts as a duplicate, and they all cancel each other out, making duplicates much more likely than I thought. Since civilian ships don't really have much of a selection, I suspect that's what's happening here. Fixed this in dev though, so thanks for the find!
Hey starfarers! Can anyone help me please? Looking for a way to modify the "Increase S-mod capacity by 1" option to give two or more max S-mods. Tried looking into config and .csv files but found nothing that could help. Can it be done at all? Has anyone tried and succeeded?
You are looking for mastery_presets.json in data/shipmastery, under the "DEFAULT" entry. The simplest would just be to repalce "SModCapacity" with "SModCapacity 2" or "SModCapacity 3", etc.
Encountered rare crash when piloting a nova
Spoiler
2585737 [Thread-2] ERROR com.fs.starfarer.combat.CombatMain - java.lang.NullPointerException: Cannot read field "x" because "<parameter1>" is null
java.lang.NullPointerException: Cannot read field "x" because "<parameter1>" is null
at com.fs.starfarer.combat.CombatViewport.isNearViewport(Unknown Source)
at com.fs.starfarer.combat.entities.Ship.applyDamageInner(Unknown Source)
at com.fs.starfarer.combat.entities.Ship.applyDamageInner(Unknown Source)
at com.fs.starfarer.combat.entities.Ship.applyDamage(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.applyDamage(Unknown Source)
at shipmastery.mastery.impl.combat.shipsystems.OrionDeviceDamage$OrionDeviceDamageScript.lambda$reportProjectileCreated$0(OrionDeviceDamage.java:104)
at shipmastery.deferred.CombatDeferredActionPlugin.advance(CombatDeferredActionPlugin.java:33)
at com.fs.starfarer.title.Object.L$Oo.o00000(Unknown Source)
at com.fs.starfarer.combat.A.B.super(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.advanceInner(Unknown Source)
at com.fs.starfarer.combat.CombatEngine.advance(Unknown Source)
at com.fs.starfarer.combat.CombatState.traverse(Unknown Source)
at com.fs.state.AppDriver.begin(Unknown Source)
at com.fs.starfarer.combat.CombatMain.main(Unknown Source)
at com.fs.starfarer.StarfarerLauncher.o00000(Unknown Source)
at com.fs.starfarer.StarfarerLauncher$1.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Thanks, added a failsafe to dev. On that note, are you sure it was a nova? Nova burst and orion device should have separate (but similar) mastery effects.
Edit: next version won't be save compatible, you might have to disable that mastery on your end if it's continuing to cause issues.