The game names many things on its own. Ships, classes, systems, bodies, alien classes, ground units, missiles, companies, mining colonies, shipping lines, shipyards, races and fleets all get automatic names. Ships also get hull numbers, and several display strings join names together. This page covers the naming theme catalogue, the four theme slots a race holds, the theme name picker and its collision tests, and every one of those automatic names.

Commander names and the weighted commander name theme roll belong to commander lifecycle. This page uses that roll as an input for company, shipyard, mining and shipping line names and does not restate it. Automated NPR class and design creation belongs to NPR race generation, and the NPR ground templates belong to its automated ground forces section. Detached and fighter fleet names belong to fleet organisation. Alien contact records and their intelligence belong to intelligence mechanics. Shipyard task lifecycles belong to shipyard development and ship work, and civilian company finance belongs to civilian economy.

A naming theme has an ID (ThemeID), a description (Description), a flag that makes its names eligible as race names (RaceNameEligible) and a list of names.

DIM_NamingThemeTypes has 621 rows with the columns ThemeID, Description and RaceNameEligible. ThemeID runs from 0 to 641 with gaps. Two rows are special. Theme 0 is “Class Name Only” and theme 1 is “Name Plus Number”. Neither has names in DIM_NamingTheme, and the game treats their IDs as rules rather than lists. Theme 593, “Greek Alphabet”, also has no rows in DIM_NamingTheme, so it behaves as an empty theme. 85 rows carry RaceNameEligible 1, and 71 rows have a Description that starts with “System Theme”. Theme 493 is “Missile Names” with 187 names. The catalogue is described here and not enumerated.

DIM_NamingTheme has 110,696 rows with the columns NameThemeID and Name. They spread over 618 theme IDs. The smallest themes hold 6 names and the largest two (IDs 496 and 497) hold 5,000 each. Every NameThemeID in the game database as shipped has a matching theme row. The catalogue is described here and not enumerated.

When a game is loaded, the game reads every row of DIM_NamingThemeTypes with no sort order. It reads RaceNameEligible as true or false and files each theme under its ThemeID. It then reads DIM_NamingTheme, also with no sort order, and appends each Name to its theme’s name list. A row whose NameThemeID has no theme is skipped. Both tables load with the other static game definitions, so the lists are shared by every game in the database.

The order of a theme’s name list is the order in which SQLite returns the rows. That order drives the in-order name walk described below.

A player can add a theme from the tactical map. The game asks for a theme name and gives the theme the next ID above the highest ThemeID in DIM_NamingThemeTypes. It adds the theme to the catalogue and reads a file the player chooses. Each line of the file is split on commas and the first column becomes a name. RaceNameEligible stays false. The game writes the theme into DIM_NamingThemeTypes and its names into DIM_NamingTheme at once. These are static tables, so a custom theme is visible from every game in that database.

The Select window, used for name selection, lists every theme by Description and shows the selected theme’s names in alphabetical order. Choosing a name hands it back to the window that opened the list. The Select window does not test whether the name is in use. Class design, alien class intelligence, shipyard task naming, fleet naming and system naming all open this window.

A race holds four theme slots, one each for ship classes, systems, ground units and missiles. Ships do not use a race slot. Each ship class carries its own theme for ship names. Each system a race knows may carry a theme for the systems found beyond it, and each alien race contact carries a class theme for alien class names.

When a race is created without an NPR generation template, the class theme and the system theme each come from a uniform draw over every theme in the catalogue. The game rolls d(number of themes) and takes the theme at that position. That draw includes themes 0 and 1, the empty theme 593 and any custom theme. When theme 493 exists, both the missile slot and the ground slot get theme 493. With a template, the four slots copy the template’s slots.

A new NPR generation template makes the same draws. The template setup window lets the player set all four slots. The race creation window lets the player choose only the class and system themes. The ground and missile slots keep theme 493. The Race Information window lets a player change the class and system themes later. A race created by independence uses the same random draws.

Each of these creation steps still reads theme 493 for the missile slot when theme 493 is missing, so race creation, independence and a new template all fail with an error in that case. Race creation stops with a Function #1654 error. The game database as shipped has theme 493, so this does not happen on the stock database.

The theme lists in race creation, the Race Information window, class design, the galactic map and the NPR template window list themes by Description. They add a final entry “No Theme” with ID 0 and no names. That entry is not part of the catalogue. The Intelligence and Foreign Relations window’s theme list has no “No Theme” entry.

The game asks a theme for a name on behalf of a race and says what kind of thing is being named. It can also ask for random order, a prefix and a suffix. With no order requested, the names are tried in the order they were loaded. With no prefix or suffix, none is added. Any error inside the picker gives an empty name and shows Function #2072 or Function #2073.

When the random-order setting is 1, the names are tried in a fresh random order on each request. Any other value keeps the load order.

For each candidate in turn the picker builds the tested name.

  1. It starts from the raw candidate. The candidate is not trimmed at this point.
  2. A non-empty prefix makes the name prefix + " " + name.
  3. A non-empty suffix makes the name name + " " + suffix.
  4. The kind of name picks one collision test. The kinds are ship, ship class, system, alien class, ground unit and missile, each with the test of the same name in the next section.
  5. The first name the test reports free is returned with leading and trailing spaces trimmed.

When every candidate is in use, or the theme has no names, the picker returns an empty name. Each naming rule supplies its own fallback for an empty name. Themes 0, 1 and 593 always return an empty name because their lists are empty.

The six tests differ in scope and in how they compare.

Test Searched set Comparison Result on an error
Ship name Ships of this race, plus shipyard tasks of this race by their UnitName Both sides trimmed, exact In use (Function #2074)
Ship class name Ship classes of this race Both sides trimmed, exact In use (Function #2075)
Missile name Every missile type in the game, all races An existing name contains the candidate In use (Function #2076)
Ground unit name Every ground unit class in the game, all races An existing class name contains the candidate In use (Function #2077)
System name This race’s own names for the systems it knows Both sides trimmed, exact In use (Function #2078)
Alien class name This race’s alien class records, skipping records with no name Both sides trimmed, exact In use (Function #2079)

The missile and ground unit tests are substring tests across every race. A candidate is in use when any existing name contains it. “Dart” is therefore taken once any race has a missile named “Dart Anti-Ship Missile”, and “Lance” is taken by “Lancer”. The two tests read different collections, so one name can serve a missile and a ground unit class at the same time.

The ship test includes queued construction names, so a name typed into a shipyard task blocks the theme from offering it again. The alien class test covers every alien race the observer knows, not only the race being named.

Ship name generation names one future ship of a class.

  1. A class theme of ID 0 gives the class name, so every ship carries the class name.
  2. A class theme ID above 1 asks the picker for a ship name, with the class’s random order setting (RandomShipNameFromTheme) and the class PrefixName and SuffixName.
  3. Theme ID 1, a class with no theme, or an exhausted theme leaves an empty name. The game then counts this class’s shipyard tasks and gives class name + " " + (TotalNumber + queued tasks + 1), written with three-digit zero padding.

An error gives the name “None” (Function #2859). Three-digit zero padding writes 1 to 9 with two leading zeros and 10 to 99 with one. Numbers of 100 or more print in full.

The class settings come from the class design window. RandomShipNameFromTheme follows the “Select Random Name from Class Theme” check box. The prefix and suffix text boxes show “None” for an empty value, and typing “None” stores an empty value. The theme list writes the class theme directly. The prefix and suffix apply only to themed names. The number fallback ignores them.

Ship creation does not run ship name generation itself. It takes the name it is given as it is. It first adds 1 to the class TotalNumber, and when the given name is empty it uses class name + " " + new TotalNumber with three-digit zero padding.

The name a ship receives therefore depends on how it was created.

Creation path Name given at creation
Player shipyard construction The task’s UnitName, taken from the new ship name box of the Shipyards tab of the Economics window. The box holds the generated name unless the player edits it
NPR shipyard construction An empty name, because NPR construction tasks carry an empty UnitName, so the ship creation fallback applies
Fighter and station production The generated name
NPR parasite complement on a new ship The generated name for each small craft
Instant build in class design The generated name for the ship and for each parasite, and the ship name can be edited when “Enter Ship Names” is checked
Shipping line ships class name + " " + (line's current ship count + 1) with three-digit zero padding
NPR operational group fleets, instant fleets, wrecks An empty name

The shipyard rejects a new construction task when another ship of the race already has the name in the new ship name box. The message reads “That name is already in use for a unit of the” followed by that ship’s class name and “class”. The shipyard skips that check when the class theme’s Description is “No Theme”. The Shipyards tab of the Economics window can replace a queued name through the Select window or a free-text prompt.

The class design “rename all” button blanks every ship name of the class, then generates a name for each ship in ShipID order. Themed names come out distinct because each new name is already set before the next test. The number fallback does not change TotalNumber during the rename, so a class on theme 1 gives every ship the same number.

Ship creation names the ship’s new fleet with hull abbreviation + " " + ship name, before the hull number exists. When the new ship goes to a naval admin command, the game renames that fleet to the ship’s display name after the hull number is set.

Each race keeps a hull counter for each hull description, holding the last number issued. The counter is per race and per hull description, so classes that share a hull description share one sequence.

Drawing a hull number for a hull description used for the first time starts its counter at 1 and issues 1. Otherwise the game adds 1 to the stored counter and issues the new value. An error gives hull number 0 (Function #3496). Ship creation sets the hull number to 0 and draws a number only when the ship has no shipping line. Shipping line ships keep 0 and do not advance the counter. NPR ships, fighters and setup ships all draw numbers. The counter never goes down, so destroyed or scrapped ships leave gaps until the class design renumber tool resets it.

Two settings control display. The race’s “Use Hull Numbers” setting (chkUseHullNumbers in FCT_Race) is checked for a new race and follows the tactical map “Use Hull Numbers” check box. The class setting ClassHullNumbers defaults to 1 and follows the class design “Hull Numbers” check box.

Two tools renumber ships. The class design “renumber hull” button numbers every non-shipping-line ship of the race with the selected class’s hull description from 1 in ShipID order, then sets the counter to the last number. The Naval Organization window “Select Hull Num” button asks for a positive integer and rejects anything below 1 with “Hull number must be a positive integer”. When the race has no counter for that hull description, the button accepts the number without a duplicate test and the number becomes the counter. Otherwise it rejects a number already used by any ship with that hull description, with a message such as “Hull number 7 is already assigned to DD-07 Alaska”. That test has no race filter, so another race’s ship with the same hull description also blocks the number. A number above the counter raises the counter.

Five paths name a new ship class. Four paths mark the class name state as automated first. A copied class keeps the source class’s state, because the copy duplicates every setting of the source. A new class starts with the name “New Class”, and every fallback below applies only when the name is empty.

Path Rule Fallback when the result is empty
Class design “New Class”, from a hull description Race class theme above ID 1, checked against the race’s ship class names, order from the race’s random class setting (RandomClassName) "Class #" + ShipClassID
Class from a template Template name when not empty, else race class theme above ID 1 in load order "Class #" + ShipClassID
NPR automated design, no shipping line For others, race class theme above ID 1 in random order DefaultClassName, also for a theme of ID 0 or 1, because an automated design starts with an empty name
Shipping line design line ShortName + " " + design ShippingLineName + engine AdditionalInfo3, where the engine is the race’s most advanced researched engine technology None
Copy class name + " - Copy", or the target race’s alien class name for this class when requested and known None

DefaultClassName and ShippingLineName come from DIM_AutomatedClassDesign, for example “Tramp” with “Small F” and “Atlas” with “Large F”. The AdditionalInfo3 value of an engine technology in FCT_TechSystem is a level number, such as 0 for Conventional Engine and 5 for Ion Drive.

The NPR side of automated design, and automated designs that are given a fixed class name, are described in NPR race generation. An automated design given a fixed name keeps that name and skips the rules above.

On the two player paths, a class theme of ID 0 or 1 skips the theme draw. The name then stays “New Class”, because the fallback applies only when the name is empty. An automated design starts with an empty name, so a theme of ID 0 or 1 falls back to DefaultClassName. A race with no class theme at all makes automated naming fail with a Function #209 error before the fallback, so an ordinary automated design keeps an empty name. The “New Class” default survives on the automated side only for shipping line designs, and only when the shipping line naming step fails.

The two player paths set the class theme for ship names to theme 1, “Name Plus Number”.

The race’s random class setting (RandomClassName in FCT_Race) follows the class design check box “Random Class from Race Theme”. It belongs to the race, so it changes the order for every class the race designs later. It affects only the hull description path.

Players rename classes in class design. The rename button writes the typed name and then updates the class name state as a player rename. The “select name” button writes a theme name chosen in the Select window and does not touch the state.

The class name state has five values. They are unknown, manual, automated, manual needing update and automated needing update. Each update of the state gives one of two reasons, player rename or design change. A design change turns automated into automated needing update and every other state into manual needing update. A player rename turns unknown into manual and leaves every other state unchanged, so an automated class stays automated after a rename. Only the class design rename updates the state, and it always gives player rename. No rule in play reads the class name state to make a decision, and the save does not store it. A loaded class starts as unknown. Hull descriptions also carry a class name state, which the new hull description dialogue sets to automated.

When a race first records a system, the game stores the theme it was given on that system record and chooses the name in this order.

  1. A name supplied when the system record is created.
  2. “Sol” for the Sol system.
  3. The real star name from the known star list, written according to the ConstellationNames game option. This applies when the game uses known star systems (UseKnownStars 1 in FCT_Game), the system is a known star system, the creating step does not demand procedural naming, and UseThemeInKnownStars is 0.
  4. The given theme, checked against the race’s system names, in load order.
  5. The race system theme, when its ID is above 1, checked against the race’s system names, in load order.
  6. "System #" + SystemNumber when the result is empty or missing.

Step 5 runs only when no theme is given. A given theme that returns an empty name goes directly to step 6. Step 4 has no ID test. A given theme of ID 0 or 1 returns an empty name and the system becomes “System #n”. Exploration, fleet transfer, homeworld creation and new-system generation in the System Generation and Display window demand procedural naming whenever the race is an NPR, so NPRs never take known star names in those paths.

On first transit, the game reads the theme stored on the origin system’s record and gives it to the new record. A stored theme of ID 0 is dropped first. A chain of systems found from one start therefore keeps that start’s theme until a player changes it. The galactic map sets the theme on the selected system from its theme list. Its “No Theme” entry has ID 0, so systems found beyond it fall back to the race theme. The exploration side of first transit is in exploration and first transit.

Imported system records keep the source name. Fleet transfer gives the receiving race a system record with its own system theme. The System Generation and Display window “select name” button writes a theme name from the Select window straight to the system name with no collision test. A system name request for a system the race has no record of gives “Unknown System”.

System bodies keep separate names for each race. A body’s name for a race is the first stored name for that race. Without one, the game builds a name from the body’s place. The built name starts with a system prefix, star's name for the race + " ", unless the display leaves the prefix out.

Body class Built name
Planet prefix + Roman PlanetNumber
Asteroid "Asteroid #" + OrbitNumber, no prefix
Comet "Comet #" + OrbitNumber, no prefix
Moon, normal parent body display name + " - Moon " + OrbitNumber
Moon, compact, single star "Moon " + Roman PlanetNumber + " " + OrbitNumber
Moon, compact, multiple stars "Moon " + component letter + "-" + Roman PlanetNumber + " " + OrbitNumber
Any other class “No Name”

A star’s name for a race is the race’s system name for a single-star system. With more than one star it appends “-” and the component letter, which is the character with code Component + 64, so component 1 is “A”. A race with no record of the system gets “System Not Found”.

Setting a body name for a race updates that race’s existing record or adds a new one for the race. These events set body names.

  • Race creation names the homeworld body with the race’s homeworld name.
  • Fixed asteroid bodies record the given body name for a naming race when one is supplied. A deep-space population placed from the tactical map supplies the placing race.
  • Rename in the System Generation and Display window writes the selected race’s record.
  • Rename for all races writes a record for every race that has a record of the system.

New games and the System Generation and Display window “assign Sol body names” button copy each Sol body’s stored name into a record for each player race and Sol body that lacks one. Populations take a name when created. A homeworld population is “Home World” and any other population takes the body’s name for its race. Capture renames a population to the body name for the new owner.

Each alien race contact gets a class theme when created. The game draws a random theme again and again until the theme is neither the viewer’s own class theme nor a theme used by another of the viewer’s alien race contacts. The draw can return theme 0, 1 or 593. The draw stops only when it finds an unused theme. A contact the viewer cannot identify gets name of the system where it was detected + " Aliens #" + AlienRaceID, with RealClassNames 0. The Intelligence and Foreign Relations window can replace the theme and toggles RealClassNames and RandomNameOrder. RandomNameOrder defaults to 1.

A class found from a detected ship gets its name as follows. With RealClassNames 1 the record copies the actual class name and hull description. Otherwise the record keeps the placeholder hull description “Unknown” (row 211 of FCT_HullDescription, abbreviation “XX”). When the theme exists with ID above 1, the theme supplies a name checked against the viewer’s alien class names, in the order RandomNameOrder sets. An exhausted theme gives "Class #" + AlienClassID. A new alien class has no name set. With theme 0 or 1 no name is requested, and "Class #" + AlienClassID applies only to an empty name, so the class stays unnamed.

Classes revealed in bulk, for example by full bootstrap or an intelligence reward, have their names checked against the viewer’s own ship class names instead of its alien class names. When the contact does not use real class names, this path requires the contact to have a class theme. With none, it fails with a Function #1955 error and creates no class record.

Alien ship records take a name when first seen. With real names the record copies the ship name. Otherwise it is class name + " " + class ShipCount with three-digit zero padding, with ShipCount raised by 1 just before. Alien ground unit classes always copy the real class name, with real names on or off.

A refresh of alien class intelligence from the actual class runs on fleet transfer, bootstrap, surrender and boarding capture. When the viewer is a player and the observed race is an NPR, the refresh first writes the player’s alien class name into the NPR’s actual class name. It then copies the actual name back.

The Intelligence and Foreign Relations window offers four renames.

  • Rename writes typed text when it is not empty.
  • Auto rename picks from the contact’s class theme in load order, checked against the viewer’s alien class names, and writes the result with no fallback, so an exhausted theme writes an empty name.
  • Select name writes a choice from the Select window.
  • Correct names copies every actual class name and ship name of that alien race into the viewer’s records.

A known alien ship’s display name is alien class hull abbreviation + " " + record name, or an empty name for an unknown ship. Combat reports, missile salvo text and contact lists use it. The full intelligence model is in intelligence mechanics.

Automated ground unit class creation takes a template class name (ClassName in DIM_AutomatedGroundTemplateElements) and a setting that turns automatic names on. With the setting on, eleven unit types put a name from the race ground theme in front, checked against the ground unit class names of every race, in load order. The other unit types, including infantry, HQ, construction, anti-air and anti-vehicle types, keep the template class name.

Unit type (GUClassType) Built name
Medium vehicle (7) theme name + " " + class name
Praetorian mech (18) theme name + two spaces + class name
Anti-air vehicle (8) theme name + two spaces + class name
Infantry support vehicle (9) theme name + " Infantry Support Tank"
Vehicle HQ (10) theme name + two spaces + class name
Praetorian leader (19) theme name + two spaces + class name
Praetorian behemoth (20) theme name + two spaces + class name
Towed artillery (11) theme name + two spaces + class name
Mobile artillery (12) theme name + two spaces + class name
Surface to orbit (16) theme name + two spaces + class name
Surface to orbit point defence (15) theme name + " " + class name

An exhausted theme gives an empty name before the separator, so the class name starts with a space. The game first reuses the costliest non-obsolete class of that type the race already has, so a theme name is drawn only for a new class.

The setting is on for starting construction regiments and for automated formations. It is off for special NPR templates and for the armour rebuild. When new armour triggers the ground unit rebuild, each new class is named name of the lowest-ID existing class of that type + " " + Roman numeral of (existing count + 1). Formation names built from ordinals and body names are described in ground force organisation.

Upgraded copies get a year-suffixed name. When the base name is longer than four characters and its last four characters read as a whole number, the game replaces them with the current game year. Otherwise it appends " - " + year. An error gives “error” (Function #3595). Upgrading a ground formation template uses this rule for the new template name, and upgrading a ground unit class uses it for the upgraded class. The whole-number reading accepts a leading space, so “ 123” counts as a year.

A new missile design takes a name from the race missile theme, checked against the missile names of every race, in load order. An exhausted theme gives "Size " + missile size, with the size rounded to 2 decimal places. The game then appends one role suffix, tested in this order.

  1. “ Fighter Bombardment Pod” when the bombardment pod box is checked.
  2. “ Fighter Autocannon Pod” when the autocannon pod box is checked.
  3. “ Fighter Air-to-Air Pod” when the air-to-air box is checked.
  4. “ Buoy” when warhead strength is 0 and MSPReactor is above 0.
  5. “ Ship Decoy” when ShipDecoy is 1.
  6. “ Missile Stage” when warhead strength is 0.
  7. “ Anti-Ship Missile” when size is at least the anti-missile threshold of 4 MSP.
  8. “ AMM” otherwise.

The preview copies the name into the name box unless “freeze name” is checked, and the research project takes the same name. A race with no missile theme cannot finish a missile design. The design step fails with a Function #2609 error and produces no missile.

Company, mining colony, shipping line and shipyard names

Section titled “Company, mining colony, shipping line and shipyard names”

Four generators build names from commander names. Each starts from the race’s weighted commander name theme roll, owned by commander lifecycle. A commander name drawn from a list is a uniform pick, a roll of one die with as many sides as the list has entries, minus 1 to give the position.

The company name generator builds a manufacturer name for a race and a company type.

  1. Commander themes 28 and 29 become theme 3 (United States). DIM_CommanderNameTheme as shipped has no rows 28 or 29, so this replacement does not fire on the stock data.
  2. The pool is that theme’s names with FirstName false in DIM_CommanderNames, or all of its names when that set is empty.
  3. The generator appends one random name. When d5 is 1 or 2, or a connector was already used, it stops. Otherwise it appends “ & “ when a second d5 is 1 and “-” in the other cases, then appends one more name.
  4. A name with no connector always gets " " + suffix. A connected name gets one only when d3 is 1.

An error gives “error” (Function #2636). The suffix is a uniform pick among the DIM_CompanyNames rows whose CompanyType matches. Duplicate rows weigh twice. The game reads ID, CompanyType and CompanySuffix with no sort order.

The type comes from the CompanyNameType of the research category, stored in DIM_ResearchCategories. The create research project window passes the selected category’s type. The missile design and turret design windows both pass the Missiles category’s type, which is 4. The generated text fills a company name box. A non-empty box becomes the prefix of the technology name, for example in the create research project window.

DIM_CompanyNames has 49 rows. The research categories named in the table are those whose CompanyNameType in DIM_ResearchCategories equals the type.

CompanyType Rows Research categories using it CompanySuffix (ID)
1 25 General Science, Industry, Basic Systems, Transport & Industry, Planetary Combat, New Species, Miscellaneous Components International (1), Techsystems (3), Dynamics (4), Technology (6), Corporation (8), Space & Security (12), Engineering (13), Limited (14), Heavy Industries (18), Design Bureau (19), Aerospace (21), Aerospace Industries (22), Research Inc (23), Manufacturing (24), Aeronautical (25), Systems (30), Incorporated (35), Engineering Company (37), Heavy Industries (39), Orbital Systems (42), Megacorp (46), Biotech (47), Syndicate (48), Cybernetics (49), Foundation (50)
2 5 Active Sensors, Thermal Sensors, Electronic Warfare, Direct Fire Control, Missile Fire Control, Survey Sensors, EM Detection Sensors, Cloaking Device Electronics (9), Electronic Systems (10), Electronics Industries (16), Warning & Control (41), Sensor Systems (45)
3 8 Power Plants, Engines, Jump Engines, Missile Engines Engines Limited (15), Drive Systems (31), Marine (32), Thrust (33), Aeromarine (34), Aircraft Engine Co (36), Aero Engines (38), Turbines (40)
4 7 Lasers, Missile Launchers, Missiles, Particle Beam, Meson Cannon, Railgun, Plasma Carronade, High Power Microwave, Gauss Cannon, Magazine, CIWS, Fighter Pod Bay, Decoy Launcher Ordnance (2), Armaments (20), Advanced Defence Systems (27), Precision Arms (28), Armaments Company (29), Kinetics (43), Weapon Systems (44)
5 4 Shield Generators Defence (5), Defence Technologies (7), Defence Systems (11), Defence Industries (17)

“Heavy Industries” appears twice in type 1, so it has twice the chance of any other type 1 suffix.

A mining company name takes a random family name (FamilyName true) from the rolled commander theme. When that theme has no family names, the game uses theme 3 instead. The name is family name + " " + DIM_MiningNames entry, with the entry chosen uniformly, or “Unknown Mining Company” on an error (Function #2293). A new civilian mining colony takes this name as its population name (PopName), and its garrison formation is named name + " Garrison". The game reads the MiningName column. The colony rules are in civilian economy.

DIM_MiningNames has 25 rows.

MNID MiningName
1 Mines
2 Limited
3 Ventures
4 Company
5 Corporation
6 Resources
7 Industries
8 Industries Limited
9 Resources Limited
10 Minerals
11 Ores
12 Minerals Limited
13 Ores Limited
14 Ventures Limited
15 Minerals & Ores
16 Mines Corporation
17 Resources Corporation
18 Mining Limited
19 Mining Corporation
20 Mining and Refining
21 Group
22 Minerals Group
23 Mining Group
24 Resources Group
25 Precious Metals

A shipping line name uses the same family name rule as mining names, with the same theme 3 fallback. The family name becomes the line’s ShortName, and its LineName is ShortName + " " + DIM_LineNames entry, with the entry chosen uniformly. Each new shipping company gets its name once, when it is founded. The game reads the LineNames column with the other static game definitions. ShortName also starts every class name of the line, as shown in the class table above. ShipNum is saved and loaded but no rule in play increments it.

DIM_LineNames has 66 rows. The selection rule reads the table directly, so every row is listed.

LineNameID LineNames
21 Shipping Line
22 Shipping Group
23 Shipping Corporation
24 Shipping Company
25 Shipping Limited
26 Shipping Services
27 Shipping and Trading
28 Shipping Lines
29 Shipping Alliance
30 Shipping & Logistics
31 Carrier Line
33 Carrier Corporation
34 Carrier Company
35 Carrier Limited
36 Carrier Services
38 Carrier Lines
39 Carrier Alliance
41 Marine
42 Container Line
43 Container Group
44 Container Corporation
45 Container Company
46 Container Limited
47 Container Services
49 Container Lines
52 Shipping
53 Corporation
54 Freight
55 Transport
56 Group
57 Company
58 Limited
59 Services
60 Trading
61 Lines
62 Logistics
63 Transport Line
64 Transport Group
65 Transport Corporation
66 Transport Company
67 Transport Limited
68 Transport Services
69 Transport and Trading
70 Transport Lines
71 Transport Alliance
72 Transport and Logistics
74 Freight Line
75 Freight Group
76 Freight Corporation
77 Freight Company
78 Freight Limited
79 Freight Services
80 Freight and Trading
83 Freight and Logistics
84 Colony Line
85 Colony Group
86 Colony Corporation
87 Colony Company
88 Colony Limited
89 Colony Services
95 Interstellar Shipping
96 Interstellar Colony Ltd
97 Interstellar
98 Interstellar Services
99 Interplanetary Transport
100 Interplanetary Freight

A shipyard name takes the rolled commander theme’s names with FirstName false. It widens to all of that theme’s names, and then to every commander name, when a set is empty. The name is chosen name + " " + suffix, with the suffix chosen uniformly from DIM_ShipyardCompanies, or “No Name” on an error (Function #2215). DIM_ShipyardCompanies has 67 rows of Suffix text, from “& Co.” to “Foundry”. The game reads its Suffix column. Every new yard gets a generated name. The “auto rename” button on the Shipyards tab of the Economics window draws a fresh name.

A random race name comes from a pool of every name of every theme with RaceNameEligible true. The game picks one uniformly and trims it. It does not test for a race already using the name. An error gives an empty name (Function #1666), and an empty pool causes such an error. On the game database as shipped the pool holds 9,084 entries over 85 themes, with 8,535 distinct strings (8,434 after the trim), so repeated names weigh more.

Where Use
Race creation, standard race without a template Race name, a random empire title built from the name, homeworld = name + " Prime"
New NPR generation template The same three fields on the template
Race creation window “randomize” The same three fields, and the species name when the species sort priority is 0
Ruin race generation Ruin race name and title

Special races use fixed names. Every special race has the homeworld name “Unknown”.

Fleet names follow two rules. A unique fleet name appends “ #” and the first free number from 2 when the base name is taken. Fighter production uses it for "New Fighters - " + population name. A detached fleet name tries two-digit suffixes 02 to 99 and ends with “- Detached” when all are taken. Fleet organisation owns the full rules.

Year-suffixed names are described with ground formations above, since only ground template and class upgrades use them.

Several display names join a stored name with other names.

Display name Result
Ship abbreviation + "-" + 2-digit hull number + " " + ship name when the race “Use Hull Numbers” setting is not unchecked, ClassHullNumbers is not 0 and the ship has no shipping line. Otherwise abbreviation + " " + ship name. An error shows “Unknown” (Function #2821)
Ship with mothership same shape + " (" + mothership display name + ")". Hull numbers show only in the fleet tree, and there only when the race setting is checked and ClassHullNumbers is 1
Ship class abbreviation + " " + class name
Alien class alien hull abbreviation + " " + class name
Ground unit class for a viewer The viewer’s alien ground class name when the viewer has a record, otherwise the real class name
Fleet with commander Fleet name, plus " under the command of " + commander display name when a ship commander exists

The abbreviation is the hull abbreviation (HullAbbr in FCT_HullDescription). Two-digit zero padding writes 1 to 9 with one leading zero, and numbers of 100 or more print in full. The ship-with-mothership name does not check for a shipping line, so a shipping line ship with hull number 0 shows “-00” when the hull settings are on. Fleet tree nodes use it with hull numbers. The list of local ships offered for a shipyard task uses it without hull numbers.

The fleet with commander name takes the ship commander who comes first when the fleet’s ship commanders are ordered by rank priority and then seniority. Survey, discovery and new system events start with this text, for example "... has discovered the new system of" + system name.

The game database as shipped holds two name tables that the game never loads, PhoneticNames and FGNicknames. Neither table reaches game state.

PhoneticNames has 26 rows with PhoneticID and PhoneticName, the NATO alphabet from “Alpha” onward. Since the game does not read it, it gets no table here. FGNicknames has 479 rows with NicknameID and Nickname, short epithets such as “Eyes of the North”. It is described here and not enumerated.

These examples use invented names and values.

Prefixed theme names. A class has theme “US States” in load order with prefix “USS”. Its names start Alabama, Alaska, Arizona. The race owns “USS Alabama” and a ship named “Alaska” of another class. The tested names are “USS Alabama”, which is taken, then “USS Alaska”, which is free. The plain “Alaska” does not block it, because the test compares the full prefixed string.

Number fallback. A class on theme 1 named “Hood” has TotalNumber 4 and two queued construction tasks. The shipyard preview is “Hood 007” (4 + 2 + 1). A task with an empty UnitName, such as an NPR task, completes and ship creation raises TotalNumber to 5, so that ship is “Hood 005”.

Hull numbers. A race’s counter for hull description DD stands at 12. A new DD ship named “Alaska” draws 13 and shows as “DD-13 Alaska”. A renumbered ship with hull number 7 shows “DD-07 Alaska”. A shipping line freighter keeps 0 and its ship display name is “FR Freighter 001”.

Missile substring. The theme order is Dart, Arrow, Spear. One race already has “Dart AMM” and another has “Arrowhead Anti-Ship Missile”. “Dart” and “Arrow” both fail the substring test, so the new design is “Spear” plus its role suffix.

Company dice. The first d5 is 4, so a connector is used. The second d5 is 1, which gives “ & “. The family names drawn are “Smith” and “Jones”. The d3 is 2, so no suffix is added and the result is “Smith & Jones”. If the first d5 had been 2, the result would be “Smith” plus a suffix of the requested type, such as “Smith Turbines” for type 3.

Year suffix. In game year 2051, “Assault Battalion - 2045” ends in a four-digit number, so it becomes “Assault Battalion - 2051”. “Assault Battalion” becomes “Assault Battalion - 2051”.

Body names. System “Alpha” has two stars. Planet 3 of star component 2 shows as “Alpha-B III”. Its second moon shows as “Alpha-B III - Moon 2” in normal form and “Moon B-III 2” in compact form. An asteroid in orbit 5 shows “Asteroid #5” in either system.

Rename all on theme 1. A theme 1 class “Kirov” has three ships and TotalNumber 3, with no queued tasks. “Rename all” gives all three ships “Kirov 004”.

The naming catalogue is static data. DIM_NamingThemeTypes and DIM_NamingTheme carry no GameID. A custom theme is written there when created and stays for every game in that database. DIM_CompanyNames, DIM_MiningNames, DIM_LineNames and DIM_ShipyardCompanies load each session with the other static game definitions.

The game stores names and theme IDs in these tables.

Table Fields Unknown ID on load
FCT_Race ClassThemeID, MissileThemeID, GroundThemeID, SystemThemeID, RandomClassName, chkUseHullNumbers An unknown theme ID leaves the slot empty. An empty slot saves as 0, which reloads as theme 0
FCT_HullNumber RaceID, HullTypeID, HullCount Rows for an unknown race or hull description are skipped
FCT_ShipClass ClassName, NameThemeID, PrefixName, SuffixName, RandomShipNameFromTheme, ClassHullNumbers, TotalNumber An unknown theme ID loads theme 1
FCT_Ship ShipName, HullNumber Stored as written
FCT_ShipyardTask UnitName Stored as written
FCT_RaceSysSurvey Name, NameThemeID An unknown theme ID leaves the system theme empty
FCT_SystemBodyName RaceID, SystemBodyID, SystemID, Name Rows for an unknown race or body are skipped
FCT_AlienRace AlienRaceName, ClassThemeID, RealClassNames, RandomNameOrder ID 0 loads as no theme. Any other ID that is not in the catalogue stops the alien race load with a Function #1333 error
FCT_AlienClass, FCT_AlienShip ClassName, Name Stored as written
FCT_ShippingLines LineName, ShortName, ShipNum Stored as written
FCT_Shipyard, FCT_Population ShipyardName, PopName Stored as written
FCT_MissileType, FCT_GroundUnitClass Name, ClassName Stored as written

The save deletes and rewrites FCT_HullNumber with the other race rows. Hull counters load near the end of a game load, after ships load. A duplicate row stops the hull counter load with a Function #1153 error, and the rows after it do not load.

Several values are not saved. The class name state of ship classes and hull descriptions is absent from the save, so a loaded class starts as unknown. The “No Theme” list entry has ID 0. It saves as 0 and reloads as theme 0, “Class Name Only”. For ship names the two behave alike, because ship name generation tests only the ID. The shipyard duplicate check tests the Description “No Theme”, so after a reload the second ship of such a class is rejected as a duplicate. An alien race whose class theme was theme 0 reloads with no class theme. Revealing its classes in bulk then fails with a Function #1955 error and creates no class record, unless the contact uses real class names.

Names are not recomputed on load. Every display name in Display names is built each time from stored names, settings and hull numbers.

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