Fractal Softworks Forum

Please login or register.

Login with username, password and session length
Advanced search  

News:

Starsector 0.98a is out! (03/27/25)

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 - Tranquility

Pages: [1] 2 3
1
Modding / [0.98a] SEED Reporter (v0.1.0)
« on: May 18, 2025, 05:55:47 PM »

SEED Reporter

Console Commands required!



Safe to add to existing saves, and safe to remove from existing saves







Mod Details

This utility mod adds the ability to display information about a sector seed upon loading a new game or when running the RunSEEDReport command on an existing save. The reported information includes the location of Coronal Hypershunts (and their defender variants), Domain-era Cryosleepers, exceptional officer pods, and even specific planets (which can configured via this mod's modSettings.json).

Plus, this mod supports seed-hunting efforts by adding a new game option that completely bypasses the time-skip step - resulting in faster new game creation - and by automatically saving seeds with remarkable features to a file in Starsector's saves/common folder. A basic AutoHotkey script is included in the mod download to constantly create new games in Starsector without player intervention; combined with the automatic seed-saving, this mod will help you find your perfect seed in no time!*


* Targeted towards vanilla or vanilla-adjacent games; reliablity of seed information not guaranteed when running any mod that interferes with procedural generation!



Additional Information (recommended to read!)
Upon loading a new game, the mod will provide information about the following points-of-interest:
  • Star system containing the Sentinel planet and the planetkiller
  • Nameless Rock
  • Domain-era Cryosleepers
  • Domain-era Motherships
  • Remnant battlestations (currently, only fully-operational ones are displayed)
  • Inactive Gates
  • Planets that fulfill specific criteria (see this mod's modSettings.json to modify the existing filters)
  • Exceptional officer pods, including the officer's skill set
  • Coronal Hypershunts, including the defender variants

The seed string (followed by a list of abbreviations, including the exceptional officer skills and Hypershunt defender variants) will be automatically saved to Starsector/saves/common/seedreporter_savedSeeds.json.data if any of the following conditions are fulfilled:
  • STV - all Coronal Hypershunts contain the same exact defender variants (note that there is no guarantee they will drop 4 of the same large weapon; physically defeating the defenders is still required to verify the drops!)
  • 4EO - all four exceptional officers have the same exact skill set
  • 0EO - no exceptional officer pods are found in the sector (Saved because it is a very rare occurence and also for plausible deniability when cheating in the exceptional officers you want.)
  • {F_#...} - at least one planet filter with "saveSeedIfFound" enabled contains at least one result

Currently, completely skipping the time-pass step during new game creation will result in a different Nameless Rock location than expected, as its location is normally determined after the time-pass step. If playing in modded games, the same is true for anything else that generates after the time-pass step.

Additionally, the new game option to skip the time-pass step will not appear if the new game creation process is overridden by mods, which includes the Nexerelin mod.
[close]

Latest Changelogs
v0.1.0
  • Initial release
[close]



Credits
LazyWizard - For the Console Commands mod!
Starsector Forums - For the helpful modding tutorials and information
Unofficial Starsector Discord - For the helpful modding information and tips
Alex and the Fractal Softworks team - For the amazing game that is Starsector!


2
This would be a really useful option to have for anyone who is making new games frequently, like those testing their own mods or looking for a good seed. It would make creating new games slightly faster (since you don't have to save at all) and avoid the work of needing to clean up those extra saves to free up disk memory.

(According to my search, this was last asked in 2015, but, looking at settings.json and in the code, the option doesn't seem to have been implemented since!)

3
Attempting to exit out of mission battle with at least 1 active Attack Swarm (might need to get one of them killed first) will result in the game crashing. Apparently, the mission battle report screen attempts to get the battle status of an Attack Wing, even though they are temporary fighters? I guess this technically only happens in a modded Starsector where Swarm Launchers or similar wing-launching weapons are equipped in missions, but the root cause is almost certainly within the vanilla code.

Error message
55451 [Thread-2] ERROR com.fs.starfarer.combat.CombatMain  - java.lang.RuntimeException: Can't determine final status for Attack,Swarm, owner: 0, name: Swarm Attack Wing
java.lang.RuntimeException: Can't determine final status for Attack,Swarm, owner: 0, name: Swarm Attack Wing
   at com.fs.starfarer.combat.CombatFleetManager.getFinalStatus(Unknown Source)
   at com.fs.starfarer.combat.C.B.<init>(Unknown Source)
   at com.fs.starfarer.combat.C.o0OO.<init>(Unknown Source)
   at com.fs.starfarer.combat.C.super.<init>(Unknown Source)
   at com.fs.starfarer.combat.CombatState.endCombatAndShowDialogIfMission(Unknown Source)
   at com.fs.starfarer.combat.CombatState.dialogDismissed(Unknown Source)
   at com.fs.starfarer.ui.O.dismiss(Unknown Source)
   at com.fs.starfarer.ui.impl.o0OO.dismiss(Unknown Source)
   at com.fs.starfarer.combat.o0OO.dialogDismissed(Unknown Source)
   at com.fs.starfarer.ui.O.dismiss(Unknown Source)
   at com.fs.starfarer.ui.impl.o0OO.dismiss(Unknown Source)
   at com.fs.starfarer.ui.impl.o0OO.actionPerformed(Unknown Source)
   at com.fs.starfarer.ui.n.buttonPressed(Unknown Source)
   at com.fs.starfarer.ui.H. 00000(Unknown Source)
   at com.fs.starfarer.ui.H.processInput(Unknown Source)
   at com.fs.starfarer.ui.classsuper.o00000(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)
[close]

4
With Hull Restoration, it's possible to recover a (D) ship that only has its built-in d-mod, meaning it'll remain a (D) ship until its been dock-restored. This was fixed for Hull Restoration's passive d-mod recovery effect, but I think Hull Restoration's secondary effect of quickly-removing 1 d-mod from salvaged ships can still result in a recovered (D) ship that only has its built-in d-mod (e.g., LG ships' Special Modifications). I'd expect that, if the salvaged ship only has its built-in d-mod left, it should be recovered in its base spec instead of its (D) spec.

5
Bug Reports & Support / [0.98a-RC7] Bugs with New Lightning Weapon
« on: April 09, 2025, 02:21:23 PM »
Noticed a few bugs with the Rift Lightning weapon while testing it out:
  • If fired while using Temporal Shell (e.g., in an Anubis), the lightning will start passing through enemy ships instead of impacting the ship directly. This is easily replicated by using an Anubis with a Rift Lightning, driving up to a stationary simulator enemy ship, activating Temporal Shell, and then firing the Rift Lightning.
  • The Energy Weapon Mastery damage bonus does not apply to the rift explosion caused by the Rift Lightning. This is easy to see using the same Anubis and going against a stationary shielded ship, where the rift explosion damage does not increase as the ship's flux starts rising. It's possible that similar rift explosion effects from other weapons (for example, Rift Beam and Rift Cascade Emitter) aren't properly affected by EWM either, but the Rift Lightning explosion is simply the most obvious case of this happening since that's all of its damage.

6
During the Knight Errant quest, you can get Wrestling Sedge as a contact if you meet him at the bar and select certain dialogue options (without killing him, of course). However, in the new False Idols quest, if Sedge is killed during the confrontation, the game will say he is killed, but his contact will still remain in the comms directory; in fact, you can still talk to Wrestling Sedge and get contact missions from him just fine.

I'm 100% sure this makes zero realistic sense since Sedge's supposed to be dead at that point, but I guess even death does not stop him from continuing on the Path.

7
A pretty minor annoyance, but sometimes fleets that do not care about the player's transponder status (most notable with the System Defense Fleets) can, at random, still ask the player to turn on their transponder ("identify yourself first") before they can talk to them. This has a random chance of happening, so the best way to replicate this to is to just spam the "Open a comm link" option on a System Defense Fleet until it pops up.

8
Unlike the ones from a Coronal Hypershunt, the Tesseract from the Unusual Remnant Bounty doesn't appear to have a guaranteed chance to drop its large weapon. I got a bounty with a Strike Tesseract variant and managed to defeat it, but I didn't get the Rift Torpedo Launcher that I expected to get, nor did I get as much smaller Omega weapons. I'm assuming that whatever makes Tesseracts drop one of each Omega weapon just isn't working for this particular Tesseract.

Also, the bounty Tesseract isn't properly hidden, so its stats can be viewed in the Codex (it doesn't unlock an entry for it, though).

Edit: Also, I wanted to add this here too (as it's somewhat related), but, if a Coronal Hypershunt has two of the same Tesseract variant (e.g. two Tesseracts with Reality Disruptor), then only one of the large weapons is guaranteed to drop, with the second generally not dropping at all. I would expect the Tesseracts to always drop their large weapons, even if both have the same weapon, so losing out on a large Omega weapon drop just because the two Tesseracts happened to be the same variant feels kinda disappointing.

9
Line 74 on RiftBeamEffect.java:
Code: java
		if (source != null) {
Global.getCombatEngine().applyDamageModifiersToSpawnedProjectileWithNullWeapon(
source, WeaponType.MISSILE, false, mine.getDamage());
}
This does not seem intended, as the Rift Beam description clearly states that it deals energy damage, and the Rift Cascade Emitter, which is similar, has the rifts affected by WeaponType.ENERGY modifiers instead.

10
General Discussion / Gaming the "Fleet composition & doctrine" settings
« on: February 22, 2025, 05:44:00 PM »
Recently, I decided to do some testing on the Fleet composition & doctrine settings - partially because I wanted to optimize the auto-resolve strength of my own modded faction (hehe), but also because I am curious about whether all faction doctrine settings are really created equal, or if some are just better than others. Therefore, after some API digging and hours of coding and testing, I made myself a command that would help me determine whether an optimal setting exists and, if it does, what that setting is. This command will be available in a future update of is now available in my own testing mod (if you really want to try out the command for yourself right now, the dev branch currently contains it at the time of writing; you will also need the Console Commands mod to use the fleet-spawning command).

Using this command to spawn 10,000 player heavy patrol, or Detachment, fleets at a time (and despawning them ASAP to avoid crashing the game) and compute the averages from those fleets, I have gathered some of these results below, which includes auto-resolve strength among other useful stats. These results assume max possible ship quality (Pristine Nanoforge, Orbital Works, 10 stability) and fleet size multiplier (Alpha Core admin, size 6 colony, Cryoarithmetic Engine, 10 stability, High Command/Military Base/Patrol Base with Alpha Core):

3/2/2 composition, ship size 5, no priority ships, all normally-available blueprints
(Officer quality/Ship quality/More ships)
(5/1/1)
Showing 10000 player patrolLarge fleets, using stats from Manasa with ship quality 95.0% and fleet size 382.8125%:
----- Average fleet stats -----
Total base DP: 355.3438
Total effective DP: 355.8234
Average max CR: 72.97334%
Total officers: 13.9589
Average d-mod count: 0.31786197
Total ship FP: 283.3359
Total number of ships: 26.4898
Total frigates/destroyers/cruisers/capitals: 8.8977 / 7.0436 / 5.9319 / 4.6166
Total base XP: 253336.73
Effective strength: 499.893
Auto-resolve strength: 488.3786

(1/5/1)
Showing 10000 player patrolLarge fleets, using stats from Manasa with ship quality 145.0% and fleet size 382.8125%:
----- Average fleet stats -----
Total base DP: 355.4245
Total effective DP: 355.8665
Average max CR: 71.69347%
Total officers: 7.31
Average d-mod count: 0.08797941
Total ship FP: 283.3748
Total number of ships: 26.4596
Total frigates/destroyers/cruisers/capitals: 8.88 / 7.0019 / 5.9561 / 4.6216
Total base XP: 214213.14
Effective strength: 418.53125
Auto-resolve strength: 406.95535

(1/1/5)
Showing 10000 player patrolLarge fleets, using stats from Manasa with ship quality 95.0% and fleet size 574.21875%:
----- Average fleet stats -----
Total base DP: 575.9556
Total effective DP: 576.8071
Average max CR: 71.58003%
Total officers: 9.0
Average d-mod count: 0.31348667
Total ship FP: 426.0803
Total number of ships: 30.0
Total frigates/destroyers/cruisers/capitals: 4.4204 / 5.5911 / 9.6972 / 10.2913
Total base XP: 317017.8
Effective strength: 622.0109
Auto-resolve strength: 610.62024
[close]

5/1/1 composition, ship size 1, priority ships: Astral, Onslaught (XIV), Dominator (XIV), Doom, Medusa, Dram, Hermes, Mercury, Wolf (H)
(Officer quality/Ship quality/More ships)
(5/1/1)
Showing 10000 player patrolLarge fleets, using stats from Manasa with ship quality 95.0% and fleet size 382.8125%:
----- Average fleet stats -----
Total base DP: 336.3846
Total effective DP: 336.4037
Average max CR: 72.91317%
Total officers: 16.0
Average d-mod count: 0.25079334
Total ship FP: 285.5295
Total number of ships: 30.0
Total frigates/destroyers/cruisers/capitals: 18.6348 / 5.7863 / 3.3676 / 2.2113
Total base XP: 258765.34
Effective strength: 536.637
Auto-resolve strength: 533.0983

(1/5/1)
Showing 10000 player patrolLarge fleets, using stats from Manasa with ship quality 145.0% and fleet size 382.8125%:
----- Average fleet stats -----
Total base DP: 336.2315
Total effective DP: 336.2551
Average max CR: 71.82284%
Total officers: 9.0
Average d-mod count: 0.0
Total ship FP: 285.5663
Total number of ships: 30.0
Total frigates/destroyers/cruisers/capitals: 18.6248 / 5.805 / 3.3607 / 2.2095
Total base XP: 222901.33
Effective strength: 462.27374
Auto-resolve strength: 458.67416

(1/1/5)
Showing 10000 player patrolLarge fleets, using stats from Manasa with ship quality 95.0% and fleet size 574.21875%:
----- Average fleet stats -----
Total base DP: 555.1457
Total effective DP: 555.1889
Average max CR: 71.51346%
Total officers: 9.0
Average d-mod count: 0.24963666
Total ship FP: 427.0945
Total number of ships: 30.0
Total frigates/destroyers/cruisers/capitals: 8.8175 / 7.2181 / 10.0114 / 3.953
Total base XP: 321037.84
Effective strength: 657.39874
Auto-resolve strength: 653.85803
[close]

Based on these results and more, I have gathered the following observations and recommendations for maximizing the auto-resolve strength of your player faction patrols:
  • In general, more ships > officer quality > ship quality, regardless of the faction's current ship quality and fleet size multipliers (yes, I did test with lower base ship quality and fleet sizes).
    - In any scenario where fleet size is fixed (e.g., anything that spawns fleets with set fleet points, or FP, which tends to happen in modded games), officer quality is almost always superior - and arguably performs better in actual combat scenarios, as officers help tilt a fleet's initial DP deployment in its favor and concentrate more power in the deployed ships.

  • On average, ship size 1 produces more auto-resolve strength than ship size 5 due to spawning more combat ships - which in turn also raises the fleet's officer cap.
      - The only exception is if the fleet size is so high that it reliably produces 30-ship fleets, in which case ship size 5 may provide slightly more auto-resolve strength. In practice, this only really happens at >500% fleet size, and, even then, this only applies to the heavy patrol fleets, as the medium and small fleets will still have fewer than 30 ships. Therefore, ship size 1 remains better in most cases.

  • Prioritize ships with high FP to increase the FP contributed by officers, as officers in high FP ships contribute more FP than officers in low FP ships.
    - For frigates only, prioritize the lowest FP possible (e.g., Kite, Hound, Shepherd) to minimize wasted FP as well as increase the number of combat ships and, thereby, officers.

  • Always prioritize Hermes, Dram, and Mercury for civilian ships, as they have the lowest FP for their respective civilian categories (FREIGHTER, TANKER, LINER).
    - I am not too sure why prioritizing the bigger civilian ships - Atlas, Prometheus, and Starliner - actually decreased the average fleet's auto-resolve strength by ~20-25 (compared to Hermes/Dram/Mercury). My best guess is that fleets can only have up to a certain number/ratio of civilian ships, with any excess civilian FP becoming additional combat FP, which could explain this phenomenon.

  • Do not prioritize ships with built-in d-mods (e.g. Executor, LP ships), as the d-mods count against a ship's auto-resolve strength.

With those observations in mind, these are the recommended ships to prioritize if you want to optimize auto-resolve strength without sacrificing much in-combat strength, assuming you have the blueprints (if you do not have them, just prioritize High Tech ships, as those generally have the higher FP values):
  • Frigates: Wolf/Lasher/Wayfarer/Vigilance/Cerberus/Monitor [5 FP]
  • Destroyers: Enforcer (XIV)/Manticore/Medusa [12 FP]
  • Cruisers: Dominator (XIV) [18 FP] and Doom [22 FP]
  • Capitals: Onslaught (XIV)/Invictus [35 FP] and Legion (XIV) [30 FP]
Side note: I originally used Astral [27 FP] for the carrier slot since I was testing if prioritizing ships with high DP:FP ratios (which is basically all High Tech ships) resulted in the most auto-resolve strength (it did not, but it is close). When I tested what I thought was the most optimized fleet (the one described in the 2nd spoiler), I had forgotten that the Legion is also classified as a carrier and has a higher FP than the Astral (28 FP for base Legion, 30 FP for XIV Legion). I don't think this would have affected the result much though, given the difference is only a few FP anyways.

Edit (2/23/2025): I officially updated my testing mod since this post, so anyone can use the command if they wish. While the command's outputs are somewhat different now (most notably by making the initial patrol FP affected by randomness, like vanilla does with the in-game patrols), the overall results have not changed too much. Therefore, this post's conclusions should still hold.

With that out of the way, here are a few more results that I have ran with the final, updated version of this command, which shows the fleet stats for the average Remnant fleet (a little inaccurate since Nexus-spawned Remnant fleets actually spawn with 100% ship quality, not 120%, but that should not affect their overall composition as far as I know) and also demonstrates the auto-resolve difference when prioritizing Hermes/Dram/Mercury vs. prioritizing Atlas/Prometheus/Starliner:

Composition of the average max-strength Ordo fleet (~320 FP)
Command used: spawnfactionfleets -cv remnant 100000 84
Showing 100000 remnant taskForce fleets, using stats from fake with ship quality 120.00001% and fleet size 382.8125%:
----- Average fleet stats -----
Total base DP: 380.699
Total effective DP: 380.82333
Average ship max CR: 82.69013%
Total officers: 19.66157
Average ship d-mod count: 0.0
Total ship FP: 317.5461
Total number of ships: 24.76101
Total frigates/destroyers/cruisers/capitals: 8.15294 / 9.27229 / 5.67695 / 1.65883
Total base XP: 343250.03
Effective strength: 762.37946
Auto-resolve strength: 762.37946
----- Fleet composition of spawned fleets -----
apex: 279088 (11.271269%)
brilliant: 288607 (11.655704%)
fulgent: 573467 (23.16008%)
glimmer: 407683 (16.464716%)
lumen: 407611 (16.46181%)
nova: 85379 (3.4481227%)
radiant: 80504 (3.2512405%)
scintilla: 353762 (14.287059%)
Total number of ships: 2476101
[close]

5/1/1 composition, 1/1/5 doctrine, ship size 1, priority ships: XIV ships (Onslaught, Legion, Dominator, Enforcer), Doom, Wolf (H), Hermes, Dram, Mercury
Command used: spawnfactionfleets -cv player 100000 patrolLarge
Showing 100000 player patrolLarge fleets, using stats from Manasa with ship quality 95.0% and fleet size 574.21875%:
----- Average fleet stats -----
Total base DP: 457.8553
Total effective DP: 457.9065
Average ship max CR: 73.16648%
Total officers: 9.17807
Average ship d-mod count: 0.24968603
Total ship FP: 410.20453
Total number of ships: 30.14606
Total frigates/destroyers/cruisers/capitals: 10.62266 / 7.5158 / 8.01721 / 3.99039
Total base XP: 312781.34
Effective strength: 639.0287
Auto-resolve strength: 634.99524
----- Fleet composition of spawned fleets -----
dominator_xiv: 744006 (24.68004%)
doom: 57715 (1.9145122%)
dram: 225814 (7.490664%)
enforcer_xiv: 751580 (24.931284%)
hermes: 230199 (7.636122%)
legion_xiv: 205225 (6.8076887%)
onslaught_xiv: 193814 (6.429165%)
wolf_hegemony: 606253 (20.110521%)
Total number of ships: 3014606
[close]

5/1/1 composition, 1/1/5 doctrine, ship size 1, priority ships: XIV ships (Onslaught, Legion, Dominator, Enforcer), Doom, Wolf (H), Atlas, Prometheus, Starliner
Command used: spawnfactionfleets -cv player 100000 patrolLarge
Showing 100000 player patrolLarge fleets, using stats from Manasa with ship quality 95.0% and fleet size 574.21875%:
----- Average fleet stats -----
Total base DP: 451.42075
Total effective DP: 451.46756
Average ship max CR: 73.19648%
Total officers: 9.33836
Average ship d-mod count: 0.24947765
Total ship FP: 405.32327
Total number of ships: 30.00902
Total frigates/destroyers/cruisers/capitals: 8.1922 / 7.34252 / 7.11762 / 7.35668
Total base XP: 308297.3
Effective strength: 608.8009
Auto-resolve strength: 598.4945
----- Fleet composition of spawned fleets -----
atlas: 248494 (8.280643%)
dominator_xiv: 653581 (21.779486%)
doom: 58181 (1.9387838%)
enforcer_xiv: 734252 (24.46771%)
legion_xiv: 169037 (5.632873%)
onslaught_xiv: 171863 (5.727045%)
prometheus: 146274 (4.8743343%)
wolf_hegemony: 819220 (27.299124%)
Total number of ships: 3000902
[close]

11
I just noticed this while going over the FleetEncounterContext.java in the API to revisit the base XP calculations, but this piece of code bothers me:
Code: Java
		int fpTotal = 0; <----- int
for (FleetMemberData data : otherSide.getOwnCasualties()) {
float fp = data.getMember().getFleetPointCost();
fp *= 1f + data.getMember().getCaptain().getStats().getLevel() / 5f;
fpTotal += fp; <----- float being added to an int, resulting in the float having its decimal/floating-point part truncated
}

float xp = (float) fpTotal * 250; <----- fpTotal gets casted as a float anyways
xp *= 2f;
The problem here is that the truncation within the loop means each fp value loses their decimal values when they're being added to the total, which means each ship, on average, gives out slightly less base XP than expected. This effect is more pronounced with low FP ships. For example, 3 Kites, which are worth 3 FP each, would only add up to an fpTotal of 9 (since, for each Kite, 3 * (1 + 1 / 5) = 3.6, which gets truncated to 3), when they should be getting a fpTotal of 10.8. In other words, each unofficered or level 1 Kite is only giving ~83% of the expected base experience value!

Please rectify this somehow so we can finally get our all of our hard-earned XP from blowing up Kites!!!

12
General Discussion / [0.97a] Station Balance - A Replicated Analysis
« on: February 07, 2025, 10:27:23 PM »
The Station Balance - Methodical Analysis forum post by Dark.Revenant has provided useful insights into the power of stations, and it has no doubt shaped discussion about Starsector's stations for years. However, as the analysis was originally made during Starsector 0.9.1a, it is unlikely that the results still hold up as of the current 0.97a-RC11 version, and the use of modded ships, weapons, and fighters necessarily means the analysis' relevance for discussing vanilla balance is limited at best (which makes sense, given the original motivation of Dark.Revenant's analysis was to inform the creation of their own modded stations).

Therefore, I have replicated this analysis for Starsector 0.97a, this time using only vanilla content (i.e., no modded ships, weapons, and fighters). Since orbital station discussion tends to center around which station would be the most powerful in general, and to reduce the time needed to make this rather-preliminary analysis, only the highest station tiers (which includes the fully-operational Remnant station) will be tested here.

(I will also be replicating the overarching content, style, and format of Dark.Revenant's original analysis, because I think it is neat and, thus, is worth mimicking.)

Test Method
  • Use a battle size of 400, and all other gameplay settings, like max ships per fleet, are left at vanilla defaults.
  • Use the Adversary mod (v6.3.1 at time of writing) containing the faction against which the stations will be tested:
    • (Full disclosure: I am the author of this mod. I am also the author of the A Fleet Testing Mod mod (v0.7.1 at time of writing) containing the station tester mission used for this analysis. The mission itself was derived from Dark.Revenant's Interstellar Imperium station tester mission.)
    • The main reason is that the Adversary faction includes nearly all vanilla human ships (barring the XIV and LG-only ship variants as well as automated ships) and most vanilla weapons and fighters (excluding LG-only and Omega weapons as well as Remnant fighters), while also not including any modded ships or weapons that would hurt this analysis' relevance to vanilla playthroughs. The closest vanilla faction equivalent would probably be the independent "mercenary" faction, which does a similar thing with having many human ships and weapons, except they still lack several of the human ships (no Pirate and LP variants, no Executor, no Invictus, etc.; this is main reason I did not use them as the benchmark faction), and they also favor phase ships less due to their 4/2/1 ship type split.
    • It is worth pointing out that the Adversary's doctrine (which will be described later) is arguably tailored towards station-busting due to prioritizing max ship size and aggression (by contrast, the "everything" faction from the SWP mod only has Ship Size 3 and Aggression 3).
    • (I could have created a separate faction solely for this analysis, but I did not wish to spend extra time to make this analysis, and the Adversary faction is about 90% of what I was looking for as a generalized benchmark anyways. Besides, a future, more thorough analysis would ideally look across multiple vanilla factions instead to account for differences in faction doctrine.)
  • Spawn a station at 100% CR, with no officer and no autofit. Only the AI has full control of the station.
  • The Adversary faction has access to ships, weapons, fighters, and hullmods from all human factions, except for XIV and LG variants. No ships, weapons, or fighters are prioritized, so these will be picked according to default vanilla weights. The faction uses the following doctrine:
    • Warships 3 / Carriers 2 / Phase Ships 2
    • Officers 3 / Ship Quality 2 / Fleet Size 2 (none of these actually apply here, as the enemy fleet always spawns with a set quality and FP as well as no officers)
    • Ship Size 5
    • Aggression 5 (i.e., all ships are Reckless)
    • Combat Freighter Combat Use Fraction 0
    • Autofit Randomize Probability 0
  • Select a fleet size, in Fleet Points (FP) according to the following logic:
    • First test - start at 320 FP (chosen as it represents the average FP of a Remnant Ordo at max strength, and is also close enough to the original Star Fortress FP results from Dark.Revenant's 0.9.1a analysis.)
    • Otherwise - Adjust by a constant number of FP (which is 5 here), going up if the station won and going down if the station lost.
  • Spawn a 70% CR Adversary fleet using the doctrine and size described above, with autofit enabled, no civilian ships (e.g., no Drams, Buffalos, etc.), no officers, and 120% quality (resulting in better weapons and no random D-mods) for the enemy side. The enemy starts with the standard 5 command points upon battle start.
  • If the fleet's FP does not match the target FP, repeat the previous step up to 1000 times; the fleet with either the same or closest FP to the target FP is chosen.
  • Generates a static, no-terrain battle scenario that replicates a campaign station battle around a planet:
    • Non-hyperspace
    • No asteroids
    • Battle map size of 18000x18000 units2 (default size of battle map with no objectives)
    • Fixed standoff range of 6000 units
  • The enemy is not allowed to retreat, must fight to the last, and must deploy all ships.
  • Repeat the test until after a minimum of 10 bouts and a win ratio of 50% is reached between the last 10 bouts (i.e., 5 wins and 5 losses in the last 10 bouts).
  • The final score is the sum of the FP of the last 9 bouts plus the FP of what would have been the next bout, divided by 10 and rounded to the nearest whole number.
This is what the average Adversary fleet generated in the mission looks like, if you are curious:

Link to the image showing the stations being tested (huge image, which is why it is not embedded here): https://i.imgur.com/93zJrau.jpeg

To speed up the testing, an in-combat plugin automatically speeds up the game such that the internal game logic is running at 1/30 second intervals at the fastest possible speed, limited by the refresh rate and current FPS (going any faster would effectively destabilize the game's combat engine and make the results much less reliable).

Results
Bout Results (for reference)
These show the last 10 bouts leading to a 50% win ratio for each station tested. An asterisk (*) indicates extra bouts that replace earlier recorded bouts; for example, 3 *'s indicates 3 extra bouts were played beyond the initial 10 bouts.

Low Tech Star Fortress (11 bouts played):
*1. 310 (W)
2. 315 (W)
3. 320 (L)
4. 315 (L)
5. 310 (W)
6. 315 (L)
7. 310 (W)
8. 315 (L)
9. 310 (W)
10. 315 (L)
Average FP: (315+310+315+310+315+310+315+310+315+320) / 10 ~= 314 FP

Midline Star Fortress (34 bouts played):
**1. 290 (L)
**2. 285 (W)
**3. 290 (L)
**4. 285 (W)
*5. 290 (L)
*6. 285 (W)
*7. 290 (W)
*8. 295 (L)
*9. 290 (L)
*10. 285 (W)
Average FP: (290+285+290+285+290+285+290+295+290+285) / 10 ~= 289 FP

High Tech Star Fortress (13 bouts played):
*1. 330 (W)
*2. 335 (W)
*3. 340 (L)
4. 335 (L)
5. 330 (W)
6. 335 (L)
7. 330 (W)
8. 335 (W)
9. 340 (L)
10. 335 (L)
Average FP: (335+340+335+330+335+340+335+330+335+330) / 10 ~= 335 FP

Remnant Station (11 bouts played):
*1. 330 (L)
2. 325 (W)
3. 330 (W)
4. 335 (W)
5. 340 (L)
6. 335 (W)
7. 340 (W)
8. 345 (L)
9. 340 (L)
10. 335 (L)
Average FP: (325+330+335+340+345+340+335+340+335+330) / 10 ~= 336 FP
[close]
Low Tech Star Fortress: 314 FP
Midline Star Fortress: 289 FP
High Tech Star Fotress: 335 FP

Remnant Station: 336 FP

Analysis
Compared to the results from the 0.9.1a analysis, the FP results of all tested stations are noticeably lower, especially for the Remnant Station (336 FP here vs the 370 FP before). In addition, the gap between the buildable stations' FP results is much higher, with the Midline station having the lowest at 289 FP and the High Tech station having the greatest at 335 FP.

Besides random variance and luck (those are always a given), some potential explanations for the differences in FP results compared to the 0.9.1a analysis are:
  • Higher ratio of capitals and cruisers in the test fleets. Capitals and cruisers, by virtue of having higher flux capacity, armor, and hull integrity than the smaller ship classes, are more likely to survive getting in range of the station and, therefore, spend more time actually dealing damage to the station. The Reckless personality imposed by the Adversary's doctrine also means the ships will close in on the station for much longer, though this also means carriers, frigates, and destroyers are more likely to die needlessly.
  • Less ship/weapon/fighter choices due to a lack of modded content, leading to increased likehood of ships with higher missile counts and use of high-damage strike missiles or bombers. Most notably, test fleets packing the most HE strike missile firepower (e.g, Reapers, Hammers, Hurricanes, Cobra bombers) often did the best against the stations, usually by blowing up important modules earlier in the fight. Conversely, fleets that lacked enough missile firepower tended to be defeated with ease or barely scored a victory against the station.
  • New content additions and ship/weapon rebalances since 0.9.1a. For example, the Pegasus and the Invictus generally performed well against the stations due to heavy missile spam and Lidar Array barrages, respectively. Plus, general buffs to ships like the Onslaught, Mora, and Legion, as well as improved ship AI, likely contributed to stations faring a little worse. Finally, while weapons buffs technically do improve station effectiveness (particularly for the Midline's Storm Needler and Hephaestus Assault Gun), these buffs generally favor the ships more, especially with the changes to the Heavy Autocannon, Pulse Laser, Cyclone Reaper Launcher, and more.
Regarding the clear FP disparity between the buildable stations, the High Tech station seemed to win out despite the default station loadout being surprisingly undergunned (e.g., using Ion Pulsers in two of the available Large slots, and generally emphasizing EMP damage over raw damage). Based on observations, the Mine Strike systems (targeting vulnerable ships anywhere in the map), Gargoyle drones (Paladin PD protecting against missiles, and Fortress Shield generally keeping the drones alive much longer than the Low Tech or Midline drones), and separate shielding (protecting the station with Fortress Shield and allowing the main modules to fire regardless of shield status) all appear to contribute to the High Tech station's apparent dominance over the Low Tech and Midline stations.

On the other hand, the Midline station appeared to struggle against the test fleets, resulting in it having the lowest FP result. From what was observed, the likelihood that the Midline station wins largely depends on how often the main module is able to freely vent. At low flux, the main module's Large weapon batteries tended to wreck targeted ships, similar to an Invictus's Lidar Array barrage. At high flux, however, the main module only fired its Storm Needler and Graviton Beams, usually preventing it from also firing its Hephaestus Assault Guns and Mjolnir Cannons. Because the enemy fleet will naturally surround the station, the main module ended up staying at high flux levels in most losing battles due to it continuing to fire its kinetic weapons at any and all ships and fighters--which usually failed to finish them off.

Meanwhile, the Low Tech station scored in the middle, between the two other buildable stations. Like what was noted in the 0.9.1a analysis, enemy ships sometimes insisted on firing through the invincible structural spurs, wasting precious ammo and building up soft flux; this behavior likely contributed to few of the station's wins. Other than this errant behavior still appearing on the 0.97a version, there is not much else to say about the Low Tech station.

Lastly, the Remnant station performed relatively poorly compared to its 0.9.1a analysis result, only besting the High Tech station's FP result by just 1 FP. While the 360 degree constant long-range firepower certainly favored the station against the test fleets, the subpar shields and armor modules also meant it was more vulnerable to heavy strike damage blowing up many of its modules early in the battle, which largely explained most of its losses.

Final Thoughts
While I can say the results from this station analysis reveal a lot about how stations are faring in the current 0.97a version, I should point out that this analysis does not account for other faction doctrines, nor does it account for a (player) fleet supporting the station against the enemy fleets. For example, the Midline station, and the High Tech station to a lesser extent, would likely perform much better when a friendly fleet provides it cover from flanking enemy ships, amplifying its ability to provide supporting firepower. In addition, actual enemy fleets have officers as well as active admiral skills, not to mention an entirely different fleet doctrine that either helps or hinders them against stations in general. Also, we should not forget about the stations themselves having vastly different loadouts due to faction weapon availability and autofit--anyone who fought against the Persean League's Midline Star Fortress should know that well.

Despite all of what I just said, the results do appear to support the notion of certain stations being better than others, following the High Tech > Low Tech > Midline sentiment that I have often noticed in community discussions both in the forums and outside of it. Whether these results are a cause for concern or simply a random coincidence that can be brushed off as such remains to be seen; a more thorough analysis, with a more robust and replicable methodology that actually tests against the actual vanilla factions, would probably need to be done to say anything more conclusive.

Special Thanks
  • Dark.Revenant - For the original station analysis and methodology! Also for the II station tester code that I uncerimoniously cribbed to help create my own station tester mission (hopefully you don't mind!).
  • Himemiko - For the Java 23/24 conversion kit to vastly improve Starsector performance! Without this, running the tests like would've taken too long for me to actually consider replicating the original station analysis.

13
Issue was originally reported here on May 28, 2023: https://fractalsoftworks.com/forum/index.php?topic=27053.0. However, this bug appears to still be present on the current 0.97a-RC11 version (I also found what could be a related bug report regarding inconsistent Coronal Hypershunt and Orbital Solar Array locations: https://fractalsoftworks.com/forum/index.php?topic=29830.0). To summarize, the portrait chosen at the start of a new game affects the entire sector generation, and I can show this happening with the Coronal Hypershunt defenders and the exceptional pod officers (a.k.a level 7 officers).

I tested this by creating 6 completely-vanilla save files using this seed: MN-1003326966487370816. Each save used a different portrait, all of which are in the topmost row of the 0.97a portrait select screen (the exact portraits tested are: portrait12.png, portrait13.png, portrait15.png, portrait17.png, portrait18.png, and portrait20.png). All other starting conditions remained the same (Bounty Hunter start -> Kite -> Normal -> Skip Tutorial).

Afterwards, I reloaded the game to enable a few utility mods, which lets me easily check the Hypershunt defender loadouts and exceptional officer distribution for each vanilla-created save.

The results are below, which should demonstrate the effect of this bug:
Contains spoiler content
For each portrait, the first two items each represent a Coronal Hypershunt's two Tesseract variants. The third and last item represents the exceptional pod officer distribution and skillsets. In both cases, I'm using a more readable version of their internal names (the variant IDs for Tesseracts, and the code comments in CrypodOfficerGen.java for the exceptional officers) to describe each item.

portrait12.png:
- Attack / Attack2
- Attack / Attack2
- 3x Phase Ship, 1x General 2

portrait13.png:
- Attack2 / Attack2
- Strike / Strike
- 2x Phase Ship, 1x SO Ballistic, 1x Low Tech

portrait15.png:
- Disruptor / Strike
- Strike / Strike
- 2x Phase Ship, 1x level 5, 1x Low Tech

portrait17.png:
- Attack / Attack2
- Attack / Attack2
- 3x Phase Ship, 1x General 2

portrait18.png:
- Attack / Disruptor
- Attack / Disruptor
- 3x Phase Ship, 1x Slow High Tech

portrait20.png:
- Attack / Attack2
- Attack / Attack2
- 3x Phase Ship, 1x General 2

For portrait13.png, portrait15.png, and portrait18.png, I also observed some of the exceptional officers completely changing their person characteristics and salvage location, while the other officers still remained consistent across saves.
[close]
(To be transparent, Java 24 was used while running Starsector for all these tests, but I don't think this affects the bug, or at least the severity of it.)

14
General Discussion / Is Starsector ready for default Iron Mode?
« on: October 29, 2024, 11:44:22 AM »
This is something I had in mind for a long while now, but I wanted to address it sooner rather than later.

For context, this is what the tooltip for Iron Mode (also commonly known as Ironman Mode) says:


Searching around for topic threads specifically, it seems like there hasn't been much talk about Iron Mode in recent years. I found both this thread and that thread while searching, but both threads are from before the 0.95.1a patch in November 2021. Now that we are currently in 0.97a, and the 0.98 update is in the works right now, it is possible things may have changed since then. So, I mainly want to ask you all this: How fun would Starsector feel if Iron Mode is permanently on? This is just a hypothethical situation, obviously - especially since I can think of so many good reasons to leave it as a toggle-able option. However, since the tooltip does suggest, with its "intended" keyword, that Iron Mode is meant to be the default option when Starsector will officially release, I do think it's a great idea to start thinking about what Starsector's current Iron Mode experience would be like for the average new player - and if that experience would be satisfying enough to make the mode enabled by default.

15
While waiting for my favorite mods to update, I wanted to pass the time by finding out how early a player can kill a Star Fortress. Typically, these Tier 3 stations are reserved for the late- or end-game, where a player is near or at level 15 and has their full 240 DP fleet to bear. However, as Kuba K had demonstrated in their videos at least a year ago, a well-piloted frigate can destroy any Star Fortresses by exploiting their gaps and weaknesses to safely damage the modules. Out of boredom, I decided to take on this challenge myself, but elevate it by doing it in as few Starsector days as possible.

The main incentive for pursuing an early Star Fortress (SF) kill is the amount of potential XP it can provide, which would, in theory, allow for easy power-leveling. Here, exploiting the battle difficulty XP% mechanic is crucial. Generally, difficulty XP% is meant to encourage fighting fleets tougher than your current fleet and is roughly based on the ratio between the player's total DP and the enemy's total DP. However, thanks to Vanshilar's efforts, and with my own research into the relevant code, the calculations were found to overemphasize officers when determining a fleet's DP. As such, a wise power-leveler would probably want to avoid using officers whenever it was practical (or, if desired, stick to level 1 officers to also increase their levels in parallel) and take on fleets with excessive officer numbers. In practice, though, at low levels and with a starter fleet, maximizing the difficulty XP%, which caps at +500%, just meant finding a big enough fleet near the victim SF — a simple task given the presence of trade fleets and Military Bases that accompany a SF.

The next obstacles to overcome are the availability of early credits, ships, equipment, and XP. Starting off with the explorer fast-start and then selling most of the fleet trivializes the credit grind, so there's no worries there (barring that, a Hegemony commission also provides bonus credit income every in-game month). For ships, frigate phase ships are among the simplest and most effective for soloing a SF, but these ships usually want a few key weapons and hullmods to truly make them pop. In this role, I initially identified the Shade (P) and the Gremlin as viable candidates for the first SF kill; both are cheap, missile-capable phase frigates that can be acquired at any Black Market. Reapers, a classic anti-station missile thanks to the 4000 HE damage, and the Expanded Missile Racks (EMR) hullmod are also found in any Black Markets, so those aren't a problem either. This leaves early XP as the remaining obstacle. Thankfully, visiting the Luddic Shrines from the Pilgrim's Path sidequest provides a fast, non-combat method of gaining XP. With optimal SP expenditure, visiting 5 of the 6 shrines allowed me to reach level 3 — a level that provides just enough SP to S-Mod EMR in all the frigates and make elite the chosen Combat skills.

Finding the perfect SF for the first kill was pretty simple — it was the High-Tech SF located in Hybrasil's Eochu Bres. What's special about a HT SF is that, with well-positioned Reaper hits, two of the primary modules can be destroyed at the same time. As a HT SF only has 4 modules that must be destroyed, this fact reduces the number of Reapers and, therefore, ships needed to claim the first kill.

Some testing and practice runs later, I finally managed to pull off a SF kill in under 1 in-game month, as shown in this video:

https://youtu.be/hhsBMQj6NMw

As impressive as that sounds, I would have been content to leave it as just that. However, after some thought and a little more boredom, I was compelled to push this even further than before. As stated before, the incentive for an early SF kill is the potential XP for power-leveling. With a +423% difficulty bonus, and excluding the bonus XP, the SF kill in the video provided around 1,250,000 XP — around 10.5% of the 11,710,000 total XP required to reach level 15. If both difficulty XP% and bonus XP were always maxed out, only a few more SF kills would be needed to finish the level 15 journey. Since no one else seemed to have attempted doing a speedrun to level 15 before, I figured I might as well jumpstart interest in this field by doing some runs of my own.

Because getting to level 15 obviously takes longer than getting a SF kill, and I wanted to get a respectable run going as soon as possible, I adjusted my previous strategy to prioritize battle consistency and avoiding ship losses. That meant using Afflictors and Shade (P)'s over the Gremlin (their terrible base speed is not ideal for avoiding shots and escaping) and grabbing Antimatter Blasters (AMB) for clean-up. In addition, I also made further optimizations, especially with the player skills. Initially, I neglected to choose Target Analysis (TA) and Wolfpack Tactics (WT) during the first SF kill. Since station modules are technically counted as frigates, I had thought that the damage bonuses didn't apply to them. However, I later found out that stations are, in fact, affected by those skills, as hull-size-dependent bonuses actually do consider the parent ship (in this case, stations are considered as capital ships for these purposes). So, that means doing a skill respec to replace Navigation with TA and WT — an SP cost I can afford thanks to further optimizations with bonus XP and routing changes.

Now, I'll take a brief moment to mention how the actual XP gain is calculated. Unlike difficulty XP%, which is far more complicated, the total XP gained after-battle is an incredibly simple calculation. Provided below is a code snippet from the gainXP() method in FleetEncounterContext.java:
Code: java
        int fpTotal = 0;
        for (FleetMemberData data : otherSide.getOwnCasualties()) {
            float fp = data.getMember().getFleetPointCost();
            fp *= 1f + data.getMember().getCaptain().getStats().getLevel() / 5f;
            fpTotal += fp;
        }
       
        float xp = (float) fpTotal * 250;
        xp *= 2f;
       
        float difficultyMult = Math.max(1f, difficulty);
        xp *= difficultyMult;
       
        xp *= computePlayerContribFraction();
       
        xp *= Global.getSettings().getFloat("xpGainMult");
Here, a ship's Fleet Points (FP), a hidden value that roughly indicates ship strength and is used for autoresolve, is multiplied by the level of their captain (unofficered ships are considered to have a level 1 captain, resulting in ships always getting at least +20% base XP). This value is then further multiplied by 500 to get a ship's base XP amount, not accounting for the difficulty XP% or other factors. All Star Fortresses have a FP value of 400, so, with no officers or Alpha Cores, they will provide (400 * 1.2) * 500 = 240,000 base XP. Multiplying this by (1 + 5.0) from difficulty XP% and by 2 from bonus XP results in a maximum total of 2,880,000 XP per SF kill — a little more than 24.5% of the XP needed to reach level 15. Given there are 4 SF in the entire Sector, and being able to acquire sufficient bonus XP for 3 of them, this hopefully illustrates why I continue to focus on killing SFs for the level 15 speedrun.

Thus, without further ado, after some practice runs (a 4-hour run, followed by a 2-hour run), some failed attempts (of course), and a bit of luck and improvisation, I present to you all a level 15 speedrun done in under an hour!

https://youtu.be/qFu7PXKLCh0

Honestly, I am quite proud of accomplishing this feat, despite only starting serious attempts literally yesterday. It's certainly not a perfect speedrun (for example, there is a lot of room to improve on micro and overall routing), but it is one that I can reasonably replicate and follow in a casual playthrough to bypass the leveling grind. If XP calculations remain unchanged going into Starsector 0.98, this might even be the first thing I will try to do on the first playthrough. If anyone else can find or think of a faster method of power-leveling, it would be great to hear your thoughts in this thread.

(Now, the only question that remains is why does the standard variant of the HT station batteries call for an Ion Pulser in the middle large energy slot?)

Pages: [1] 2 3