Below the administrative command, the game groups ships in three containers. A sub-fleet is a named group inside a fleet, and sub-fleets can nest. A squadron is a group of docked ships hung from a parent ship, the carrier. This page follows fleet creation, the sub-fleet tree, carrier squadrons, the totals each group shows, the rules that pick a group’s senior officer, and every path that detaches ships, a squadron or a sub-fleet into a new fleet.

Naval administration covers administrative commands and the command each fleet belongs to. Carriers, parasites and hangar transfers covers hangar capacity, landing eligibility and carrier replenishment. Jump transit and scatter of squadrons and sub-fleets are in squadron transit and transit by sub-fleet. Formation movement of anchored fleets is in anchored fleet formation movement. Carrier launch data and the squadron operating range are in combat targeting pass setup, and the NPR fighter return logic is in fighter return to carriers. Order and cargo consequences of membership changes are in fleet membership changes, and the identity of split and merged fleets is in transfers, refits, splits and merges. Fleet naming themes belong to naming themes, automatic naming and hull numbers. This page describes only the names that organisation actions produce.

Each container is recorded in a different place. A fleet holds an explicit list of its ships. A sub-fleet holds no list. Its membership is each ship’s sub-fleet assignment, saved as FCT_Ship.SubFleetID, and every sub-fleet total scans every ship in the game for ships assigned to it. A squadron holds no list either. Its membership is each ship’s squadron assignment, saved as ParentSquadronID, and the squadron itself sits in the squadron list of its parent ship.

Container Where the game keeps it Membership test Parent link
Fleet The game’s fleet list, keyed by FleetID The fleet’s ship list and each ship’s fleet (FCT_Ship.FleetID) Administrative command (ParentCommandID)
Sub-fleet The game’s sub-fleet list, keyed by SubFleetID Ships whose sub-fleet assignment is this sub-fleet Parent fleet (ParentFleetID), optional parent sub-fleet (ParentSubFleetID)
Squadron The squadron list of its parent ship, keyed by SquadronID Ships whose squadron assignment is this squadron Parent ship (ParentShipID)

A sub-fleet carries its race, its parent fleet, an optional parent sub-fleet, its ID and the saved parent sub-fleet ID, a name, a tree expansion flag, and the same formation settings that a fleet carries. These are the anchor fleet, the specific threat, the anchor bearing offset, the anchor distance, guard nearest hostile contact, guard nearest known warship and use anchor destination, saved as AnchorFleetID, SpecificThreatID, AnchorFleetBearingOffset, AnchorFleetDistance, GuardNearestHostileContact, GuardNearestKnownWarship and UseAnchorDestination. Formation movement picks only fleets that have an anchor fleet, so a sub-fleet does not move in formation while it is inside its parent fleet. The formation settings take effect only when the sub-fleet becomes a fleet, because detachment copies them onto the new fleet.

A squadron carries its parent ship, its ID, a name and a tree expansion flag. Its name starts as “New Squadron” until the creating action sets it.

Each ship records three more organisation links. Its mothership is the carrier it is docked in (MothershipID). Its assigned mothership is the carrier it returns to (AssignedMSID). AssignedSquadronID remembers a squadron after the ship’s squadron membership has been cleared, so that landing on the assigned mothership can restore the membership.

The Naval Organization window tree has no node type for a squadron. Its node types are none, administrative command, fleet, sub-fleet, ship, shipping line, and a seventh unnamed type (value 6) that no part of the Naval Organization window refers to.

The game creates every fleet through one shared creation process. A quick way to create a fleet works out the location first and then runs that process. It starts from the capital system at coordinates (0, 0). It replaces that with the position of the parent command’s population, or with the fleet position of the parent command’s ship. It then replaces it again with the system and coordinates of the orbit body when one is given. The quick way reads the parent command’s population without checking that a command was given. With no parent command it fails, shows the error Function #2467 and creates no fleet.

The creation process works in this order.

  1. It takes a new ID from the fleet ID counter and sets the race, the system, the coordinates, the last coordinates, the increment start coordinates and the orbit body.
  2. For an NPR race, a request for no operational group (value 0) becomes Reinforcement Group (OperationalGroupID 11 in DIM_OperationalGroup). The fleet takes the operational group, clears its standing orders, adds the group’s PrimaryStandingOrder at priority 1 and its SecondaryStandingOrder at priority 2, and starts its own NPR fleet AI.
  3. A non-empty name becomes the fleet name. An empty name would give “New Fleet #” plus the ID, but that name is never applied, so the fleet has no name at all.
  4. A fleet with no parent command goes under the race’s root administrative command.
  5. The fleet joins the game’s fleet list and gets a “Created on” history entry with the current game date.

Adding a standing order ignores a missing order and the None order (OrderID 0 in DIM_StandingOrders), so an operational group whose secondary order is None leaves priority 2 empty. Reinforcement Group, for example, stores primary order 48 (MV: Operational Group) and secondary order 0, so its new fleets get one standing order.

The Naval Organization window’s Create Fleet button requires a selected administrative command node. It opens the name dialogue with “New Fleet” as the default and uses the quick way to create a fleet, with the body of the command’s population or the orbit body of the command ship’s fleet. A command with neither a population nor a ship creates nothing and shows no message.

Most fleets come from other paths. Ship creation creates a fleet named after the hull abbreviation and the ship name when it receives an administrative command or when its assigned fleet is missing. In the administrative command case it then renames the fleet to the ship’s display name. The NPR starting navy and the operational group fleets are described in operational groups and fleets. Every detachment path on this page creates its fleet through the creation process, at the source fleet’s system, coordinates and orbit body, under the source fleet’s parent command.

Two actions create sub-fleets.

Action ID Name Prompt Parent
Create Sub-Fleet with a prompt From the sub-fleet ID counter, taken before the dialogue Dialogue result, default “New Sub-Fleet” Yes, cancel creates nothing The given fleet and sub-fleet
Silent top-level creation From the sub-fleet ID counter A name supplied by the action that asks for it No This fleet, no parent sub-fleet

The prompted version takes the ID before it shows the dialogue, so a cancelled dialogue uses up an ID that no sub-fleet holds. It adds the sub-fleet to the game’s sub-fleet list only after the dialogue returns. Neither version checks for a duplicate name.

The Create Sub-Fleet button accepts a fleet node or a sub-fleet node. On a fleet node with ships selected in the ship list, it creates a top-level sub-fleet, marks it expanded, moves each selected ship into it by changing only the ship’s sub-fleet assignment, and selects the new node. On a fleet node without a selection it creates an empty top-level sub-fleet. On a sub-fleet node it creates a child of that sub-fleet in the same fleet, and the selected ships are not moved. Moving ships into a new sub-fleet does not touch their mothership, their squadron or their fleet.

Silent top-level creation has four uses, and each one names the sub-fleet after a fleet or squadron that is being merged.

Use Name Settings copied
Join as Sub-Fleet move action (182) Joining fleet’s name All seven formation settings from the joining fleet
Land on Assigned Mothership as Sub-Fleet move action (222) Landing fleet’s name All seven formation settings from the landing fleet
Shift-drop of a fleet on a fleet Dragged fleet’s name None
Launch All in the Naval Organization window One per distinct source squadron, named after it None

Renaming is a Naval Organization window action. The rename button prompts with the current name and stores the result only when it is not an empty string. This works the same for fleets, ships, squadrons, sub-fleets and administrative commands. It updates the node text in place without rebuilding the tree.

Deleting a sub-fleet moves every ship assigned to it to the deleted sub-fleet’s parent sub-fleet, which is no sub-fleet at all for a top-level sub-fleet. It then removes the sub-fleet from the game’s sub-fleet list. It does not reparent child sub-fleets. A child keeps its parent link to the removed sub-fleet. The Delete button confirms with a Yes/No box and deletes through the sub-fleet’s parent fleet.

Removing a whole fleet deletes every sub-fleet whose parent fleet is the removed fleet, unless a guard stops the removal first. The guards stop it when the fleet has a shipyard task, is the destination for space station construction, or is the destination for fighter factory construction, as fleet destination removal describes. After the sub-fleets go, the removal clears the anchor of fleets and of sub-fleets that were anchored to the removed fleet, and then removes the fleet’s ships. Two later passes repeat the same anchor tests and never find a match, because the first passes have already cleared every such anchor. Removing a single ship works differently. When the last ship leaves a fleet that way, the game drops the emptied fleet from the fleet list directly, without the full fleet removal, so that fleet’s sub-fleets remain in the game’s sub-fleet list.

Drag and drop in the Naval Organization window tree does most manual reorganisation. A drop on the dragged node itself or on empty space does nothing. Holding Shift during the drop asks for a new sub-fleet. Every location test in the table requires an absolute difference below 1.0 on each coordinate axis. “Within one unit” and “same coordinates” are that test alone, and the drop compares the system separately. “Same location” is one test that compares the coordinates and the system together.

Dragged Dropped on Checks Effect
Sub-fleet Sub-fleet of the same fleet None The target becomes its parent sub-fleet
Sub-fleet Sub-fleet of another fleet Within one unit, same system, same race Transfers the ships assigned directly to the dragged sub-fleet, then takes the target as parent sub-fleet and the target’s fleet as parent fleet
Sub-fleet Its own fleet None Becomes top level
Sub-fleet Another fleet Within one unit, same system, same race Transfers its own ships, becomes top level in the target
Ship Sub-fleet of its own fleet None Joins the sub-fleet, leaves its squadron and its mothership, and its parasites join the same sub-fleet
Ship Sub-fleet of another fleet Within one unit, same system, same race Joins the sub-fleet, leaves its mothership, and transfers with its squadron cleared
Ship Squadron Within one unit, same system, hangar space unless already docked in that carrier Docks if needed, joins the squadron and records it in AssignedSquadronID
Ship Its own fleet None Leaves its sub-fleet and its mothership, and its parasites leave their sub-fleet
Ship Another fleet Same coordinates, same system, same race Leaves its sub-fleet and its mothership, and transfers with its squadron cleared
Squadron Ship Within one unit, same system, hangar space for the whole squadron Docks every squadron ship in the target and makes the target the squadron’s parent ship
Fleet Administrative command Same race Moves the fleet under that command
Fleet Fleet Same location, same race Selected ships move, or the whole fleet is absorbed
Fleet Squadron Within one unit, same system, hangar space for the fleet’s independent ships Docks the independent ships and adds them to the squadron, but leaves AssignedSquadronID unchanged
Fleet Sub-fleet Not its own sub-fleet, same location, same race Absorbed into that sub-fleet

Hangar space means that the carrier’s available hangar capacity is at least the ship’s class size, or at least the summed class sizes of the squadron or of the fleet’s independent ships. A drop that docks a ship also makes the carrier its assigned mothership.

A sub-fleet or ship dropped on a command or ship node, and a fleet dropped on a node type outside the table, show a message and change nothing. A failed check also shows a message and changes nothing. A sub-fleet that fails its location check, for example, shows “Sub-fleets may only be moved within their current fleet (including sub-fleets) or to a fleet or sub-fleet of the same race in the same location as their parent fleet”. A fleet dropped on its own sub-fleet shows “Fleets cannot be moved under their own sub-fleet”. A squadron dropped on anything but a ship changes nothing and shows no message. After any successful drop, the window rebuilds the tree.

Dragging a sub-fleet to another fleet moves only the ships assigned directly to it. Ships in its child sub-fleets stay in the old fleet. The children keep the old fleet as their parent fleet while their parent sub-fleet is the moved sub-fleet. Dragging a sub-fleet onto one of its own descendants in the same fleet creates a parent cycle, because the same-fleet drop sets the parent sub-fleet without checking ancestry. The consequences for the tree view are in consistency gaps and reload repairs.

A separate subtree move carries a whole sub-fleet hierarchy into another fleet. It sets the sub-fleet’s parent fleet to the destination, transfers the sub-fleet’s own ships, and repeats for each child sub-fleet. It keeps every parent sub-fleet link below the starting sub-fleet. It sets the parent fleet before it transfers the ships, so the speed update treats the destination fleet as the fleet the ships left. Each ship still leaves the fleet it is really in, so the ships move. The transfer then recomputes the destination fleet’s speed twice and never recomputes the speed of the fleet the ships actually left. Only sub-fleet detachment uses this subtree move, for the children of the detached sub-fleet.

A group transfer between fleets moves each ship without a speed update and then sets both fleets’ set speed to their maximum speed. A single ship transfer clears the ship’s squadron only when the action clears squadron membership. It carries docked parasites into the target fleet and into the carrier’s sub-fleet, and it moves the ship’s shipyard task to the new fleet. A ship it tows follows it into the new fleet, and a tow link from a ship that stays in another fleet is released. It removes the source fleet through the full fleet removal when the source is empty and the transfer asks for that. The parasite step adds the carrier, not the parasite, to the target fleet’s ship list, which shared ship transfer order records.

The join move actions handle arrival the same way. A fleet ordered to join itself logs an Illegal Order event (event type 140) saying that it “has an order to join with itself. While it would be entertaining to watch the attempt, this is not actually possible”, and it transfers nothing. Otherwise the join records the joined fleet, applies the action’s own organisation effect, transfers every ship with removal of the emptied source and without squadron clearing, and marks the source fleet for deletion. The next fleet sweep rebuilds the fleet list without marked fleets.

Action Organisation effect before the transfer
Join Fleet (3) and the refuel, resupply, ordnance and overhaul variants that target the fleet None. Ships keep their sub-fleet assignments
Join as Sub-Fleet (182) A new top-level sub-fleet in the target, named after the joining fleet with its formation settings. Ships without a sub-fleet enter it. Every sub-fleet of the joining fleet moves to the target, and its top-level sub-fleets become children of the new sub-fleet
Join Sub-Fleet (185) Every ship enters the sub-fleet chosen in the order (DestinationItemID), when that sub-fleet still exists and belongs to the target

Join Sub-Fleet has two fallbacks. When the sub-fleet no longer exists, it logs an Illegal Order event saying that the fleet “has an order to join a sub-fleet that no longer exists. Therefore, the fleet will join with the original parent fleet of the sub-fleet”, and the ships join with their existing sub-fleet assignments. When the sub-fleet exists but its parent fleet is not the target, the assignment is skipped silently and the transfer still runs.

The sub-fleet variants that only set a mode do not assign the joining ships to any sub-fleet. These are Join & Refuel Target Sub-Fleet (184), Join & Resupply Target Sub-Fleet (205), Join and Add Ordnance to Sub-Fleet (196), Join and Replace Ordnance in Sub-Fleet (198) and Join and Remove Ordnance from Sub-Fleet (200). They set the joining ships’ tanker, supply ship or collier status to the sub-fleet mode. Which ships those modes then serve is described in automatic fleet tanker transfers and automatic fleet MSP transfers.

The order editor offers Join Sub-Fleet, Join & Refuel Target Sub-Fleet and the three ordnance sub-fleet actions only when the destination fleet has at least one sub-fleet, meaning that some sub-fleet names that fleet as its parent fleet. Join as Sub-Fleet (182) has no such requirement. This test belongs to move requirements 59, 60 and 64 in DIM_MoveAction.MoveRequirementID. Join Sub-Fleet uses 59, Join & Refuel Target Sub-Fleet uses 60, and the three ordnance sub-fleet actions use 64. Requirement 60 also needs a free tanker with an undamaged refuelling system in the joining fleet, and requirement 64 needs a collier with an undamaged ordnance transfer system. The item list for a sub-fleet destination lists every sub-fleet of the destination fleet at any depth, in the order the game stores them. A destination that is not a fleet shows “Destination is not a fleet”.

Absorbing a fleet sets every source ship’s sub-fleet assignment to a given sub-fleet, or to none. It transfers the ships with removal of the emptied source, and then removes the source from the fleet list again. The Absorb move action (121) uses no sub-fleet. The fleet drag uses no sub-fleet, the dropped-on sub-fleet, or a new sub-fleet on a Shift-drop. A drag of a fleet onto another fleet while more than one ship row is selected moves only the selected ships, each into the drop sub-fleet or to the top level.

Sub-fleet aggregation and the fleet overview

Section titled “Sub-fleet aggregation and the fleet overview”

Each sub-fleet total scans every ship in the game for ships assigned to this sub-fleet. The scan reaches only direct members. No total adds the ships of child sub-fleets.

Total Value Rounding or filter
Ship list Member list Direct members, in the order the game stores ships
Colonist capacity Transport - Colonist (component type 17) plus Transport - Passenger (type 50) capacity No commander bonuses
Available cargo capacity Sum of each member’s available cargo capacity Whole number
Military hull tonnage Class sizes of non-commercial members summed in HS, truncated to a whole number, times 50 tons per HS The sum in HS is truncated before the multiplication by 50
Maintenance support capacity Maintenance Module (type 48) capacity No commander bonuses
Fuel capacity Fuel Storage (type 3) capacity Truncated to a whole number
Maintenance supply capacity Sum of each member’s effective maintenance supply capacity Truncated to a whole number, returned as a decimal
Current maintenance supplies Sum of members’ CurrentMaintSupplies None
Current fuel Sum of members’ Fuel None
Troop capacity Transport - Troops (type 27) capacity Truncated to a whole number
Cargo capacity Transport - Cargo (type 4) capacity No commander bonuses
Maximum active sensor range, maximum beam range Largest member value 0 with no members
Maximum missile range Largest maximum missile range among members, for the target resolution the display asks for 0 with no members
Protection value Sum of each member’s protection value None
Maximum speed Lowest effective maximum speed among members with no mothership and no tractor parent 1 with no such member, truncated to a whole number
Sub-fleet commander Most senior ship commander See commander helpers

Seven sub-fleet totals have no error report of their own. They are the ship list, military hull tonnage, maintenance support capacity, fuel capacity, current fuel, troop capacity and cargo capacity. If one of them fails, the error is reported by whatever screen or process asked for the total. The other totals show their own function error and return 0, 1 or no value.

Sub-fleet membership is a scan over all ships, not over the parent fleet. A ship whose sub-fleet assignment points at a sub-fleet of another fleet counts in that sub-fleet’s totals.

The Naval Organization window summary is filled by one overview step for a fleet, a sub-fleet or a squadron. The sub-fleet or squadron value replaces the fleet value for the commander, maximum speed, protection, missile, beam and sensor range, fuel, MSP, troop, cargo, colonist, maintenance support, military hull tonnage, crew and cost lines. When both a sub-fleet and a squadron are given, the squadron value wins because it is assigned last.

Four lines are computed differently.

Line Source of the value
Annual MSP Every independent non-commercial ship in the fleet
Available troop capacity in brackets The whole fleet
Survey, harvester, terraforming and mining capacity The fleet’s component capacity limited to the sub-fleet for a sub-fleet, the squadron’s own component capacity for a squadron
Military hull tonnage The sub-fleet or squadron value truncated to a whole number again

For geological and gravitational survey sensors, the fleet version of the component capacity applies a crew-shortfall factor to the running total, which ship and fleet capacity describes. Only ships in the fleet, or in the selected sub-fleet, that have at least one undamaged component of that type are counted. Ship by ship, it adds the ship’s capacity with commander bonuses. When that ship’s current crew is below its class crew, it then multiplies the whole running total, including the ships added before it, by current crew divided by class crew. The squadron version applies no crew factor.

The overview also changes state. It takes the maximum speed of the selected sub-fleet or squadron, and when the fleet’s set speed is above it, it lowers the fleet’s set speed to that value. A sub-fleet whose members are all in this fleet and include a free ship has a maximum at or above the fleet’s maximum, so its node leaves the set speed alone. An empty sub-fleet, or one whose members are all docked or towed, has a maximum speed of 1. A squadron whose ships are all docked has a maximum speed of 1 too. Selecting either node sets the parent fleet’s speed to 1 km/s. The next movement sub-pulse restores the set speed to the fleet’s maximum speed when the fleet has move orders, no ship under maintenance and UseMaximumSpeed set. UseMaximumSpeed defaults to true for a new fleet. The window runs the overview whenever it refreshes the selection, and selecting a sub-fleet node or a squadron node both cause that refresh.

The ship list and the ship class summary filter the same way. Both start from ships whose fleet is this fleet, then keep only direct members of the sub-fleet or the squadron. Selecting a sub-fleet node also fills the formation orders list from the sub-fleet’s own anchor settings.

Two actions create squadrons. Both take an ID from the squadron ID counter and add the squadron to the parent ship’s squadron list.

Action Name Prompt
Silent squadron creation A name supplied by the action that asks for it No
Create Squadron with a prompt Dialogue result, default parent ship name plus “ Strikegroup” Yes, cancel creates nothing after the ID is taken

The prompted version takes the ID before the dialogue, so a cancelled prompt uses one up. It does not check that the parent ship has a hangar. The Create Squadron button requires a selected ship node. It then expands both the new squadron and the parent ship and selects the parent ship node.

Silent squadron creation has five uses.

Use Name Members
NPR ship creation with small craft templates Ship name plus “ Strikegroup” Each created fighter joins it and records it in AssignedSquadronID
Player ship creation from a population with a parasite source Ship name plus “ Strikegroup” Each fitting parasite docks, joins the squadron and takes the carrier as its assigned mothership
Instant build in class design with assigned parasites Ship name plus “ Strikegroup” Instant fighters built into the carrier
Land on Specified Mothership as Squadron move action (228) Landing fleet’s name Every landing ship that fits
NPR fighter reassignment to carriers Carrier name plus “ strikegroup” in lower case, when the carrier has no squadron Never runs. The fighter selection before it removes each chosen fighter from the list it is still working through, which fails with the error Function #3858 before a squadron is created

Landing ties squadrons to docking. The specified-mothership landings, move actions 157, 158, 228 and 229, set each fitting ship’s squadron to the destination squadron, or to none when the landing has no squadron. They set AssignedSquadronID to match, or to 0. Landing on assigned motherships restores the squadron from AssignedSquadronID when the carrier still holds a squadron with that ID. Hangar checks and failure events belong to carriers, parasites and hangar transfers.

Deleting a squadron removes every member from it and sets their AssignedSquadronID to 0, then removes the squadron from the carrier’s squadron list. The members stay docked, because their mothership does not change. The Delete button deletes it through the squadron’s parent ship after a Yes/No confirmation.

Dragging a squadron onto another ship docks every member in the target ship, transfers members that are in another fleet without clearing their squadron, gives them the target ship’s sub-fleet, and makes the target the squadron’s parent ship. It does not move the squadron from the old carrier’s squadron list to the new carrier’s list.

Launch All turns squadrons into sub-fleets. With nothing selected it shows “Please select a fleet, sub-fleet or ship”. For a fleet or sub-fleet node it collects the parasites whose carrier is not itself docked, and for a ship node it collects that ship’s parasites. It creates a fleet named after the selection plus “ Strikegroup”, using the fleet name, the sub-fleet name or the ship name. It creates one top-level sub-fleet per distinct squadron among those parasites, named after the squadron. Each parasite enters the first sub-fleet whose name equals its squadron’s name, or the top level when it has no squadron. It then clears the parasite’s mothership and squadron and transfers it with squadron clearing. AssignedSquadronID and the assigned mothership survive, so a later Land on Assigned Mothership / Squadron order (move action 38) restores the squadron. Two squadrons with the same name put all their ships into the first matching sub-fleet and leave the second sub-fleet empty.

The squadron totals mirror the sub-fleet totals and select the ships whose squadron is this squadron. Each of them has its own error report.

Total Difference from the sub-fleet total
Ship list Returns no list on an error, where the sub-fleet version has no error report of its own
Component capacity by type Sub-fleets have no equivalent. Sums each member’s component capacity with commander bonuses
Available cargo capacity Built on the squadron ship list
Maximum speed Same rule, lowest effective speed among members with no mothership and no tractor parent, else 1
Capacity, supply, fuel, troop, cargo, colonist, protection and range totals Same rules and truncation
Squadron commander Same rule as the sub-fleet commander

The squadron component capacity is the only squadron total that applies commander bonuses. The Naval Organization window uses it for the geological and gravitational survey, Sorium harvester, terraforming and orbital mining lines when a squadron is selected.

A squadron’s members are usually docked, so its maximum speed is usually 1. The members count for protection, ranges and capacities whether or not they are docked.

Four rules choose a senior ship commander. Each one collects the ship commander of every ship in a set, drops ships without one, and takes the first commander ordered by rank Priority ascending, then Seniority ascending. Priority 1 is the most senior rank and seniority 1 is the most senior officer in a rank, as ranks, themes and seniority describes.

Rule Ship set Empty result
Fleet commander The fleet’s ship list, including docked parasites No commander
Sub-fleet commander Ships assigned to this sub-fleet No commander
Squadron commander Ships in this squadron No commander
Senior captain with a component type Ships of this fleet with at least one undamaged component of the type No commander

The sub-fleet and squadron rules check that the group has ships before they set aside ships without a commander. A group with ships but no commanders passes that test and still produces no commander, so the order of the tests does not change the result.

The game stores no fleet commander. Every display or rule that needs one recomputes it.

Consumer Use
Fleet name with commander Appends “ under the command of “ and the commander’s name
Commander assignment text “Fleet Commander” when the commander is the fleet commander and the fleet has more than one ship
Highest subordinate rank of an administrative command Highest rank among the fleet commanders of directly attached fleets
Naval Organization window overview Commander label for the fleet, sub-fleet or squadron

Fleet measurements record nothing for NPR races. For player races the game credits each measurement to the senior captain with the relevant component. Jump points discovered credit a gravitational survey ship. Tons salvaged credit a salvage module ship. Lagrange point and jump point stabilisations credit a jump point stabilisation ship. Ruins, mineral bodies credit a geological survey ship. Every other measurement credits the most senior ship commander in the fleet, chosen with the same ordering.

Independent and untractored ship selection

Section titled “Independent and untractored ship selection”

Three fleet selections separate free ships from carried and towed ships.

Selection Ships kept Drawn from
Independent ships No mothership The fleet’s ship list
Independent ship count Count of ships with no mothership The fleet’s ship list
Untractored independent ships No mothership and no tractor parent (TractorParentShipID) The fleet’s ship list

A fleet’s maximum speed is the lowest effective maximum speed among its untractored independent ships, truncated to a whole number, or 1 when there are none. The check for recently damaged slow ships also reads the untractored independent list. It runs at the end of combat attack processing and its aftermath. For each ship with damaged components and less than 90,000 seconds since its last damage (LastShipDamageTime), whose fleet has at least two untractored independent ships, damaged or not, it detaches the ship into a Reinforcement Group fleet. It does so when the ship’s effective speed differs from its class speed and is below 0.9 times the effective speed of the fastest untractored independent ship in the fleet.

The independent ship count decides whether an event names the fleet. Maintenance failure, damage control, crew quarters strain and morale events append the fleet name in brackets only when the fleet has more than one independent ship.

The assigned-mothership lookup collects the distinct assigned motherships of this fleet’s ships whose carrier fleet is in the same system. It returns that carrier’s fleet only when exactly one carrier qualifies. Two carriers in one fleet still count as two. The standing order MV: Assigned Mothership (OrderID 31 in DIM_StandingOrders) uses it to queue Land on Assigned Mothership / Squadron (move action 38).

Every detachment path creates a fleet at the source fleet’s location under the source fleet’s parent command, removes the detached ships from their sub-fleet, and transfers them. The paths differ in name, operational group, copied orders and what happens to squadron and carrier links.

Path New fleet name NPR operational group Orders copied Squadron Mothership
Single-ship detach Ship display name Source fighter group kept, otherwise the requested group or Reinforcement Group Flags Cleared, AssignedSquadronID kept Kept
Ship-list detach Source name plus “ - Detached” Requested, or Reinforcement Group Flags Cleared Kept
Sub-fleet detach Sub-fleet name Source group Flags Cleared, saved to AssignedSquadronID Kept
Squadron detach Squadron name Requested, else source group Flags and IncludeSquadrons Cleared, saved to AssignedSquadronID Cleared
Category detach Source name plus a category suffix Tanker or Collier for those categories Never Kept Kept
Naval Organization window multi-ship detach Display name for one ship, otherwise the next detached name Source group Flags, plus IncludeSquadrons from a squadron node Cleared, saved to AssignedSquadronID Cleared when the carrier stayed behind

“Flags” means that the source fleet has DetachedStanding or DetachedConditional set. “Kept” in the mothership column means that the path leaves the mothership as it was. The Naval Organization window clears it afterwards for ships whose carrier is not in the new fleet, but the automatic paths do not.

The operational groups named on this page are rows of DIM_OperationalGroup. Reinforcement Group is ID 11, Tanker 14, Collier 16, Beam-Only DD Squadron 26, Ramming Force 27, Missile Fighter Squadron 84 and Beam Fighter Squadron 85. A request for no group is value 0.

Copying detached orders clears both of the new fleet’s order lists first, whatever the flags. It then copies the standing orders by priority, sharing the same catalogue orders, and creates a new conditional order for each conditional entry with the same order, condition and create-waypoint flag.

Because of the unconditional clear, a source with only DetachedConditional set produces a fleet with no standing orders. For an NPR fleet this removes the primary and secondary operational group orders that fleet creation added.

The three flags belong to each fleet. The Naval Organization window shows them as the Copy Standing on Detach, Copy Conditional on Detach and Include Squadrons check boxes, refreshed from the selected fleet. Ticking a box writes the flag only when a fleet node is selected. A sub-fleet or squadron node shows “Please select a fleet” instead. The new fleet does not inherit the flags.

IncludeSquadrons gates only the squadron paths. Squadron detach copies orders only when it is set, and the window multi-ship detach skips the copy when the selected node is a squadron and the flag is clear. The ship and sub-fleet paths ignore it.

Single-ship detach chooses the operational group only for NPR ships whose fleet has a group. A source group of Beam Fighter Squadron (85) or Missile Fighter Squadron (84) replaces the requested group. Any other source group turns a request for no group into Reinforcement Group (11). The new fleet takes the ship display name. That name is the hull abbreviation, a space and the ship name. When the race’s hull number option is on, the ship’s class uses hull numbers and the ship has no shipping line, it is the hull abbreviation, a hyphen, the two-digit hull number, a space and the ship name. The detach clears the ship’s sub-fleet, copies orders when a flag is set, and transfers the ship with a speed update. The transfer removes the source fleet if it becomes empty when the action asks for that, keeps shipyard tasks and clears squadron membership.

Ship-list detach has one user, the NPR damaged-fleet response. It splits the fast beam combat ships into a Beam-Only DD Squadron (26) fleet. These are ships with a protection value above 0, a role capability above incapable and beam fire control in their automated design, whose effective speed is above the speed of the nearest hostile fleet. For an NPR race a request for no group becomes Reinforcement Group. It transfers each ship separately with squadron clearing.

The Naval Organization window’s Detach button acts on three kinds of selection. A ship node detaches that ship. It first clears the ship’s mothership, then runs single-ship detach without empty-source removal. The button then tries to save the ship’s squadron into AssignedSquadronID, which never applies because the transfer has already cleared the squadron, so AssignedSquadronID keeps whatever value it had. A fleet, sub-fleet or squadron node with ship rows selected builds its own fleet instead of using ship-list detach. It takes the source fleet from the node, creates the fleet with the source group or no group, copies orders under the gate above, and transfers each selected ship after saving its squadron to AssignedSquadronID. A sub-fleet or squadron node without a selection detaches the whole group. A fleet node without a selection shows “Please select one or more ships from the ship list to detach”.

Sub-fleet detach runs these steps.

  1. It records the sub-fleet’s direct members and takes the source fleet’s operational group, or no group.
  2. It creates the fleet named after the sub-fleet and copies the seven formation settings from the sub-fleet.
  3. It copies orders when a flag is set.
  4. For each member it clears the sub-fleet assignment, and moves a squadron membership into AssignedSquadronID before clearing it.
  5. It transfers the members as a group, which recomputes the source fleet’s speed while the child sub-fleets’ ships are still in it.
  6. Each direct child becomes a top-level sub-fleet of the new fleet and moves with its whole subtree through the subtree move. Grandchildren keep their parent links.
  7. It deletes the detached sub-fleet, which has no members left.

The child moves do not recompute the source fleet’s speed, as moving ships and sub-fleets describes. Members of child sub-fleets keep their squadron and their mothership, because only direct members pass through step 4. A sub-fleet with no ships at any depth still produces a fleet, whose speed becomes 1 because a fleet with no free ship has a maximum speed of 1. When child sub-fleets hold ships, the subtree move recomputes the new fleet’s speed from them.

The window’s sub-fleet detach and the Detach Escorts button use it. Both buttons then clear the mothership of any parasite whose carrier is not in the new fleet. Detach Escorts runs it for every sub-fleet of the selected fleet that has an anchor fleet, at any depth, from a list built before it starts. A nested anchored sub-fleet that has already moved with its parent is detached again from its new fleet, so every anchored sub-fleet ends as its own fleet. The Squadron Transit by Sub-Fleet move action (183) uses a separate version. It treats every sub-fleet of the fleet, at any depth, as its own transit group and does not move children with their parent.

Recall Escorts does the reverse. For each fleet in the same system whose anchor fleet is the selected fleet, it clears the move orders and queues Join as Sub-Fleet (182) to the selected fleet. The join then rebuilds a top-level sub-fleet with the escort’s name and formation settings.

Squadron detach replaces a request for no group with the source group when there is one, names the fleet after the squadron, and copies orders only with a flag and IncludeSquadrons. It then saves each member’s squadron to AssignedSquadronID and clears the squadron, the sub-fleet and the mothership before the transfer. The squadron itself stays in its carrier’s squadron list. The NPR launch step detaches each carrier squadron into a Missile Fighter Squadron (84) fleet when the carrier class has magazine capacity (MagazineCapacity above 0), otherwise into a Beam Fighter Squadron (85) fleet.

Category detach selects fleet members by a class flag. A match value of 0 adds “Non-” to the suffix.

Category Selection for match 1 Suffix NPR group Move action
Fuel tanker Class FuelTanker = 1 “Tanker Detachment” Tanker (14) Detach Tankers (100)
Collier Class Collier = 1 “Collier Detachment” Collier (16) Detach Colliers (101)
Supply ship Class SupplyShip = 1 “Supply Ship Detachment” None, so Reinforcement Group (11) Detach Supply Ships (188)
Survey ship Geological or gravitational survey capacity above 0 “Survey Ship Detachment” None, so Reinforcement Group (11) Detach Non-Survey Ships (95) with match 0

The full name is the source name, “ - “, the optional “Non-” and the suffix. With match 0 the survey category selects ships with no geological and no gravitational survey capacity, counted without commander bonuses. The detach refuses with an Orders Completed event (event type 45) when no ship qualifies, saying that the fleet “cannot carry out detachment order as no ships qualify for detachment”. It also refuses when every ship qualifies, saying “cannot carry out detachment order as no ships would remain in fleet”. It does not copy orders, and it clears only the sub-fleet assignment before a group transfer without squadron clearing. The selection reads the fleet’s ship list, which includes docked parasites, so a parasite that matches leaves its carrier’s fleet with its mothership still set. Queue consequences are in fleet membership changes.

Trigger Group Empty source removed Condition
Recently damaged slow ships Reinforcement Group (11) Yes Damaged within 90,000 seconds and below 0.9 of the fastest untractored independent member
Combat damage Reinforcement Group (11) Yes Target slower than its fleet’s set speed, fleet has more than one ship, target not destroyed, no tractor parent
Tractor release None No Detaches only when the release destination is not a fleet, or is a fleet that no longer exists. A non-fleet destination copies the tug fleet’s assigned population. An existing fleet destination receives the ship by transfer instead
Divide Fleet into Single Ships (8) and Transit and Divide Fleet (94) None Yes Every ship with no mothership, copying AvoidAlienSystems and AvoidDanger
NPR ramming force Ramming Force (27) Yes Ship with empty missile ordnance, in a fleet whose ordnance is empty and that has no redeployment order
NPR fleet regrouping Reinforcement Group (11) No Fleet with more than one ship, no shipping line, and none of the earlier role components. These are gravitational or geological survey sensors, a terraforming module, a Sorium harvester, a salvage module, jump point stabilisation, an orbital mining module, a diplomacy module, missile or direct fire control, a fuel transfer system and troop transport

The combat damage detach also marks the ship as detached from its parent fleet due to damage. When the fleet has only one ship or the target was destroyed, the fleet’s set speed drops to the target’s effective speed, truncated to a whole number, instead. The regrouping detaches every ship, including the last, and does not remove the emptied source fleet. It cannot stop early, because it counts the fleet’s ships as they were when it began. The fleet sweep later drops NPR fleets with no ships.

Releasing parasites clears the mothership of every ship docked in the carrier. It builds a fleet name ending “ Parasites” and then discards it. It does not create a fleet, does not change sub-fleet or squadron membership and does not transfer the parasites. Only the shipyard scrap task uses it, just before it removes the carrier. Because the parasites are no longer docked, removing the carrier does not destroy them with it, and they stay in the carrier’s former fleet.

The window multi-ship detach gets a free name from the detached-name rule. The rule collects every fleet name of the race. When the last two characters of the base name read as a whole number, the prefix is the base without those two characters. Otherwise the prefix is the base plus a space. It then tries suffixes 2 to 99 in order, writing 2 to 9 with a leading zero, and returns the first prefix plus suffix that no fleet of the race uses. When all 98 are taken it returns the prefix plus “- Detached”.

The number test accepts a leading sign and leading white space, so “-7” and “ 7” count as numbers. A base shorter than two characters makes the rule fail with the error Function #2275, and the base comes back unchanged.

The unique-name rule returns the base when no fleet of the race has that name. Otherwise it returns the base plus “ #” and the first number from 2 upward that is free. Only fighter production uses it. When a player population has no fighter destination fleet at its coordinates, or an NPR population has no fleet of the matching fighter group at its body, the new fleet is named “New Fighters - “ plus the population name, passed through the unique-name rule.

The other paths do not check names. Single-ship detach uses the ship display name, squadron and sub-fleet detach reuse the group name, ship-list detach appends “ - Detached”, and category detach appends its suffix, so duplicates are possible.

The Naval Organization window rebuilds its tree from scratch. The rebuild hides the tree, clears it, prepares the administrative commands, adds the race’s first command without a parent as the root, adds child commands and the root’s fleets, optionally adds civilian shipping lines, shows the tree and restores the remembered selection.

Tree level Children it adds Order
Administrative command Fleets of the command that have no shipping line, optionally limited to one system, then each fleet’s top-level ship nodes and top-level sub-fleets Fleets and sub-fleets by name
Sub-fleet Sub-fleets whose parent sub-fleet is this one, each with its ships and children By name
Ship nodes under a fleet or sub-fleet Ships of the fleet with the matching sub-fleet assignment, minus every ship of the fleet that is in a squadron Class size descending, hull abbreviation, hull number, ship name
Squadrons under a ship Squadrons in the ship’s squadron list By name
Ships under a squadron Every ship in the squadron, in any fleet As for ship nodes
Civilian shipping lines Shipping lines and their fleets, with top-level ships only By name

Ship text is the ship display name, with the hull number when the race’s hull number option is on and the ship’s class uses hull numbers, followed by the carrier’s display name in brackets when the ship is docked, plus “ (SF)” when SyncFire is 1. A ship with damaged components is red, otherwise one with armour damage is orange. Sub-fleet and squadron nodes are cyan, and command nodes are light green. Each node expands when its stored expansion flag is set, and expanding or collapsing a node writes that flag unless the window is suspending its events.

Building ship nodes for a fleet or sub-fleet also records whether the listed ships have a usable jump drive. The command level resets that record for each fleet before its ship and sub-fleet nodes. The fleet text then gets “ [JB]” when a listed ship has a usable standard jump drive, and “ [JC]” when the only usable jump drives are special types. It gets “ [M]” for a fleet with move orders and “ [O]” for a fleet with a ship under maintenance. Each marker sits behind its game option, saved as chkShowJD, chkOrders and chkOverhauls in FCT_Game. Squadron members do not contribute to the jump drive markers. A fourth marker, “ [JM]“, never appears, because a ship with a usable standard jump drive also counts as having a usable jump drive of any kind.

Each squadron node sits only below a ship node built for a fleet or sub-fleet. The ships listed under a squadron get no squadron nodes of their own, so a carrier that is itself in a squadron shows its own squadrons nowhere.

The tree restores the selection from the race’s remembered node type and node ID. Fleet, sub-fleet, ship and command nodes compare both values. Squadron nodes have no restore test. Selecting a squadron node stores the node type sub-fleet with the squadron’s ID, and dropping a fleet onto a squadron stores the node type fleet with the squadron’s ID. The next rebuild therefore selects a sub-fleet or fleet whose ID happens to equal that squadron ID, or nothing.

The game also contains a fleet node layout with one child per ship class, labelled with the count and the ship class name, and ship children by name. Nothing in play uses it.

The ship detail buttons share one selection guard. These include damage control, refuel priority, open fire and the Spacemaster refuel buttons. The guard does nothing while the window is suspending its events. It shows “Please select a race” without a race, and “Please select a ship” without a selected node, whatever the button. It does not test the node type, so each button checks for a ship node itself. The organisation buttons on this page make their own race and node checks instead.

Because the three containers are recorded in three places, several operations leave them disagreeing. The table lists the gaps these operations produce and what corrects them.

Gap Cause Visible effect Correction
Parasite missing from a fleet’s ship list A single ship transfer adds the carrier instead of the parasite when the parasite is not transferred in the same batch The fleet’s ship list and the fleet commander omit it, while scans of every ship by fleet include it Reload rebuilds each fleet’s ship list from each ship’s FleetID
Squadron under the wrong carrier A squadron drag changes the parent ship without moving the squadron between squadron lists The tree shows the squadron and its members under the old carrier. Deleting it removes nothing from the old carrier’s list Save writes the new carrier’s ParentShipID, so reload attaches it there
Ships hidden from the tree Members of a squadron whose carrier was scrapped keep their squadron membership Ship nodes exclude them and no squadron node lists them Reload finds no saved squadron and leaves them without a squadron
Child sub-fleet in the wrong fleet A sub-fleet drag between fleets moves only direct members The child’s node appears under the moved parent but lists ships still in the old fleet None
Sub-fleet cycle A same-fleet drag onto a descendant The cycle has no top-level entry, so its sub-fleets and their ships disappear from the tree None
Stale sub-fleet link Sub-fleet deletion leaves children pointing at the removed parent. A deletion cascade can leave ships pointing at it Ships with that link, and child sub-fleets of the deleted one together with their ships, appear under no node Reload finds no sub-fleet for the saved ID, leaves those ships with no sub-fleet and makes the orphaned child sub-fleets top-level
Orphan sub-fleets Removing a ship empties a fleet, which the game drops without deleting its sub-fleets Orphans stay in the game’s sub-fleet list Reload skips rows whose parent fleet is missing
Fleet speed of 1 Selecting a docked squadron node or an empty sub-fleet node lowers the fleet’s set speed The fleet’s set speed drops to 1 km/s The next movement sub-pulse restores the set speed to the maximum speed for a fleet with move orders, no ship under maintenance and UseMaximumSpeed set, which is the default. A group transfer, or a single transfer with a speed update, also recomputes it. A fleet with UseMaximumSpeed clear, or with no move orders, keeps 1 km/s until the player sets the speed or such a transfer changes its membership

Deletion cascades depend on the order in which the game stores sub-fleets. When any join other than Join as Sub-Fleet empties the source, and Join Sub-Fleet has not reassigned the ships, the full fleet removal deletes the source’s sub-fleets in that stored order while the joined ships still point at them. A parent deleted before its child sends the parent’s ships to the top level, then sends the child’s ships to the removed parent. A child deleted first sends its ships to the parent, and the parent’s deletion then sends all of them to the top level. A guard in fleet destination removal can stop the removal before that deletion. The deletion mark still drops the source from the fleet list at the next sweep, so its sub-fleets stay in the game’s sub-fleet list as orphans. Absorbing a fleet has the same outcome, because it removes the source from the fleet list itself.

The examples use invented inputs.

Inputs Outcome
Multi-ship detach from “Battle Fleet”, race already has “Battle Fleet 02” Prefix “Battle Fleet “, suffix 02 taken, result “Battle Fleet 03”
Multi-ship detach from “TF-7” “-7” reads as a number, prefix “TF”, result “TF02”
Multi-ship detach from “Escort 12”, race uses every name “Escort 02” to “Escort 99” Prefix “Escort “, result “Escort - Detached”
Multi-ship detach from a fleet named “A” The naming rule fails with the error Function #2275, result “A”
Fighter destination fleet “New Fighters - Luna” exists, as does “New Fighters - Luna #2” The unique-name rule returns “New Fighters - Luna #3”
Sub-fleet of three non-commercial 2.4 HS fighters Sum 7.2 HS, truncated to 7, hull tonnage 350 t rather than 360 t
Carrier fleet at 2,000 km/s with a squadron of four docked fighters, squadron node selected The squadron’s maximum speed is 1, and the fleet’s set speed becomes 1. Reselecting the fleet shows “Speed 1 km/s” and “Max Speed 2,000 km/s”. The next movement sub-pulse restores 2,000 km/s only when the fleet has move orders and UseMaximumSpeed set
Player fleet with standing orders at 1 and 2 and one conditional order, only DetachedConditional set, one ship detached The new fleet has no standing orders and one new conditional order with the same condition, order and waypoint flag
Source group Missile Fighter Squadron, NPR ship detached with Ramming Force requested Single-ship detach replaces the request, and the new fleet is Missile Fighter Squadron

Fleet F holds main ship M at 3,000 km/s, top-level sub-fleet S with ship A at 2,500 km/s, and child sub-fleet C of S with ship B at 1,000 km/s. F’s set speed is 1,000. Detaching S transfers A first, and the group transfer recomputes F at the minimum of M and B, which is 1,000. The child move then carries C and ship B through the subtree move, which recomputes only the new fleet. F keeps its set speed of 1,000 although only M remains. The new fleet takes the minimum of A and B, which is 1,000.

Fleet F has top-level sub-fleet E anchored to F at 50,000 km with a bearing offset of 90. Detach Escorts creates fleet E with anchor fleet F, distance 50,000 and offset 90, which then moves in formation. Recall Escorts clears E’s orders and queues Join as Sub-Fleet to F. On arrival the join creates a new top-level sub-fleet named E in F, copies the anchor F, the distance and the offset back, places E’s ships in it and removes fleet E. The settings survive the round trip, but the sub-fleet has a new ID.

Carrier K holds squadron Q (ID 40) with four fighters, each with assigned mothership K and AssignedSquadronID 40. Launch All on K creates fleet “K Strikegroup” with sub-fleet Q and moves the fighters into it with their mothership and squadron cleared. A later Land on Assigned Mothership / Squadron order docks each fighter that fits in K. It leaves each one with no sub-fleet, because this landing creates no landing sub-fleet, and restores its squadron from ID 40.

Data Table and columns Load behaviour
Sub-fleets FCT_SubFleets: SubFleetID, GameID, RaceID, ParentFleetID, ParentSubFleetID, SubFleetName, AnchorFleetID, SpecificThreatID, AnchorFleetDistance, AnchorFleetBearingOffset, GuardNearestHostileContact, GuardNearestKnownWarship, UseAnchorDestination Rows with a missing race or parent fleet are skipped. The anchor fleet resolves when that fleet exists. The parent sub-fleet resolves in a second pass
Sub-fleet threat SpecificThreatID Resolved after alien ships load, when the race knows that alien ship
Squadrons FCT_Squadron: SquadronID, GameID, SquadronName, ParentShipID Rows with a missing parent ship are skipped. The squadron enters the parent ship’s squadron list
Ship membership FCT_Ship: FleetID, SubFleetID, ParentSquadronID, AssignedSquadronID, MothershipID, AssignedMSID The sub-fleet resolves while ships load. The squadron resolves when squadrons load, which also rewrites AssignedSquadronID to the resolved squadron’s ID
Detach flags FCT_Fleet: DetachedStanding, DetachedConditional, IncludeSquadrons Loaded as true or false
ID counters The sub-fleet and squadron ID counters Set to the largest FCT_SubFleets.SubFleetID and FCT_Squadron.SquadronID at load

Both saves delete the game’s rows and write every object again. The sub-fleet save writes every sub-fleet in the game’s sub-fleet list, including orphans whose parent fleet is gone, and those rows are skipped at load. The squadron save writes the squadrons found in each ship’s squadron list, with the ParentShipID of the squadron’s current parent ship.

The load order is fleets, standing and conditional orders, sub-fleets, ships, then much later alien ships and squadrons. A ship’s sub-fleet therefore resolves against sub-fleets that already exist, and squadrons resolve against ships that already exist. A saved ParentSquadronID with no matching squadron leaves the ship without a squadron and keeps the saved AssignedSquadronID.

The tree expansion flags on fleets, sub-fleets, ships and squadrons, and the remembered Naval Organization window selection, are not saved, so they reset on load. The counters come from the saved maximum, so an ID that a cancelled prompt used up above the highest saved ID is issued again after a reload. Counter scope is described in identity namespaces and counter scope.

Related community documentation and developer posts. These may describe a different game version.