Galatia Academy

hull_mods.csv

hull_mods.csv is a file of .csv format. While possible to edit with a text editor, it is highly advised to use appropriate tools for .csv format to prevent errors. If you plan on editing .csv, please visit Required Tools- CSV editor page and use one of the appropriate tools.

A hull_mods.csv and script extending BaseHullMod combine to contain all of the information directly about a hullmod. The more commonly balance tweaked information is in the Hull_mods.csv while the less commonly edited information is in the script. It is formatted as a comma delimited CSV file.

hull_mods.csv is always located inside data/hullmods/. If csv is in wrong location or with wrong name game will not read data in it.

Elements

At the very top of hull_mods.csv, you will see a list of categories. Going from left to right, the functions of each are explained in table bellow.

You should be aware what columns accept different Type of values in the cell:

  • String (ID) - this is unique ID for this separate ship, system, hullmod and so on depending on file. It most important String for most csvs and files. It how game finds things in first place. Changing ID means changing it in all other connected files, usually manually. Do ID right when you first setup entry, and try to keep it same going forward.
  • String (Any) - freeform text, usually names, descriptions or designations. Usually will not get used anywhere outside UI.
  • String (Keys) - these text fields accept only predefined values, either ids (of ships, shipsystems and other things) or some special key. Case sensitive. If you want to enter multiple keys in cell they need to be separated by comma (e.g COMBAT, CARRIER) Note that not all key columns can accept multiple values.
  • Number (int) - accepts whole numbers. Correspond to some int value in API.
  • Number (float) - accepts decimal numbers. Correspond to some float value in API. For decimals in .csv whole and decimal part separated by dot (e.g. 1.2)
Column name Type Description
name String (Any) The human-readable name of the hullmod that is displayed in-game. The internal game engine name for the hullmod is the id.
id String (ID) ID used by the game engine. Must be unique. Highly recommended to add a unique modder prefix of some kind to avoid conflicts.
tier
rarity Number (float) Integer between 0 and 1 inclusive with higher being rarer.
tech/manufacturer String (Any) Determines if the hullmod appears in the refit screen under a distinct tech/manufacturer tab. Can be left blank to be in the default Common tab, just like all vanilla hullmods.
tags String (Keys + Any) Mostly for autofit.
uiTags String (Keys + Any) Hullmod tags for refit screen. Comma delimited strings.
base value Number (float) Base price in credits. Number.
unlocked Boolean
(TRUE / FALSE)
Determines if this hullmod is unlock by player by default at the start of the game.
hidden Boolean
(TRUE / FALSE)
If TRUE then this hullmod cannot be obtained by player but is visible on ships.
hidden everywhere Boolean
(TRUE / FALSE)
If TRUE then this hullmod cannot be obtained by player and also is not visible on ships.
cost_frigate Number (int) OP cost of fitting this hullmod per this ship size - Frigate
cost_dest Number (int) OP cost of fitting this hullmod per this ship size - Destroyer
cost_cruiser Number (int) OP cost of fitting this hullmod per this ship size - Cruiser
cost_capital Number (int) OP cost of fitting this hullmod per this ship size - Capital
script File path (dot separated)
Case sensative
Path to hullmod's script. Follows Starsector's general path guidelines:
- Loose scripts -Relative path in full stop delimited format, without the file type, relative to the starsector core folder or the mod base folder. For example the vanilla hullmod AcceleratedShieldEmitter has a loose script in folder \starsector-core\data\ with name AcceleratedShieldEmitter.java so it's entry in the script path of hull_mods.csv is data.hullmods.AcceleratedShieldEmitter
- Compiled code - Relative path in full stop delimited format. For example, the vanilla hullmod ECMPackage has a compiled script inside the Starsector jar file with fully qualified path com.fs.starfarer.api.impl.hullmods with name ECMPackage so its entry in the script path of hull_mods.csv is com.fs.starfarer.api.impl.hullmods.ECMPackage. To learn how this script is coded, you can navigate into the Starsector\starsector-core\starfarer.api.zip\com\fs\starfarer\api\impl\hullmods\ECMPackage.
desc String (Any) Description you see in-game. String
short String (Any) Short description, not used in game. String
smodDesc String (Any) Description for s mod effects
sprite File path (slash separated)
Case sensative
Relative path to hullmod's icon sprite file from the core Starsector folder or the mod base folder. For example Accelerated Shields icon sprite is located in \Starsector\starsector-core\graphics\hullmods\accelerated_shields.png so it's entry for sprite in the hull_mods.csv is graphics/hullmods/accelerated_shields.png

Tags

Mostly for autofit. Comma delimited strings. Not guaranteed to be an exhaustive list.

Tags Descriptions
carrierDamageAlways dmod meant for carriers
civ For being recognized as a civilian package.
civ_package only used to detect civilian-packaged hullmods for Escort and Assault Package.
civOnly same as civ
damage group it as a dmod
damageStruct If dmod take structural damage, add more weighting for dmods that affects structure
defensive
destroyedDamageAlways
dmod
engines
fighterBayDamage
merc
no_build_in prevents the hullomd from being built-in.
no_drop prevents dropping the hullmod in raids or salvages.
no_drop_salvage perhaps prevent salvages... at least within the open-source code. Want to use no_drop.
non_phase
notAuto
notCiv
notPhase
offensive
peak_time
phaseDamage
req_spaceport makes hullmod require functioning spaceport to be able to fit it to a ship.
reqShields
shields
special
weapons

uiTags

Hullmod tags for refit screen. Comma delimited strings.

uiTags Col 2
Defenses
Engines
Fighters
Logistics
Requires Dock
Shields
Special
Support
Weapons
Last updated 6/5/2026, 7:39:25 AM by Vexlia Artemiss, Witch of Zeta · revision 9