State and units
Section titled “State and units”Mass Driver export moves colony minerals into packets that fly to another colony. In the paths described here, the game applies only the checks below, with no receiver requirement, collision damage or refund. A packet is its own mineral store. It does not use a fleet move order, a loading timer or a cargo reservation.
Related pages cover the neighbouring rules. Production mechanics covers reserves and the civilian mining bypass. The colony output and income cycle covers the order of resource consumers. Game time and state refresh covers construction cycles and subpulses. Movement and logistics and logistics interruption and reservations cover fleet cargo and orders. The civilian economy and autonomous logistics page covers how mining companies are established.
| State | Stored as | Meaning |
|---|---|---|
| Colony destination | FCT_Population.MassDriverDest |
The population’s mass driver destination, a reference to another population that follows later changes to it. Packets built later use it. |
| Colony export rate | Not saved, recalculated | Mass Driver count x 5,000 tons per year, held as a decimal. Zero when the update requires a destination and none is set. |
| Protected stock | FCT_Population columns ReserveDuranium to ReserveGallicite |
The reserve level of each mineral. Subtracted from current stock only in the normal export calculation. |
| Packet contents | FCT_MassDriverPackets columns Duranium to Gallicite |
Eleven decimal mineral quantities, already removed from source stock or diverted directly from civilian production. |
| Packet size and speed | TotalSize, Speed (decimals) |
Sum of the eleven mineral quantities in tons. Movement speed in km/s. |
| Packet identity | PacketID, GameID, RaceID, SysID, DestID |
Packet owner and launch system, plus a reference to the destination population that follows later changes to it. No source population is stored. |
| Position | Xcor, Ycor (floating point) |
Current position, in the coordinate units that movement treats as kilometres. |
| Display history | LastXcor, LastYcor, IncrementStartX, IncrementStartY |
Set at launch. The increment-start coordinates refresh each time an increment is prepared. |
| Removal mark | Not saved | Set while the game runs. Every marked packet is swept out after all packets are processed. |
Each Mass Driver gives 5,000 tons of export capacity per year. A packet starts at the base speed of 1,000 km/s. Packet size is the sum of its eleven mineral amounts.
One year is 31,536,000 seconds. Normal export takes elapsed years as a decimal. The construction cycle first divides elapsed seconds by 31,536,000 as a decimal, converts the result to a floating-point number, and passes a decimal conversion of that number to population production. Packet motion multiplies the decimal speed by the subpulse length in whole seconds, then compares that distance with the floating-point distance to the destination. These are separate numerical paths.
Destination selection and settings
Section titled “Destination selection and settings”The Mass Driver Destination list is on the Mining tab of the Economics window. It always includes None. Other candidates are added only when the source population has at least one whole Mass Driver. A candidate must have at least one Mass Driver, must be a different population and must share the source’s race survey record of the system (FCT_RaceSysSurvey). One such record exists per race and system. The list has no separate test that the candidate belongs to the source’s race. Ownership is tested only through the shared survey record.
The list is not sorted. It shows None followed by the candidates in the order the game gathers them. When the window restores the current selection, it searches by destination name, not by population ID. Duplicate names can make it select the first matching entry. These are display behaviours, not packet targeting rules.
A selection made while the window fills the list is ignored. Otherwise the game looks up the chosen ID among all populations. An ID that is not found clears the destination, including the None entry (ID 0) when no population has that ID. A selection updates the travel-time label. It does not recalculate capacity or rewrite packets already in flight. Capacity is recalculated at the start of the next population production tick.
With the Double-click Sets Reserve Amount box on the same tab checked, a double-click on a mineral row opens an entry box such as “Enter New Duranium Reserve Amount”. The game reads the entry as a decimal number and writes it as that mineral’s reserve. It does not clamp the value to zero or above. Normal export uses the saved reserve value exactly as entered. A negative reserve can make calculated exportable stock exceed physical stock. This describes the arithmetic, not a recommended setting.
Travel-time display
Section titled “Travel-time display”The Estimated Travel Time label shows N/A when no destination is set. Otherwise it takes the straight-line distance from source to destination, divides it by 1,000 and treats the result as travel seconds t. This estimate assumes the base speed of 1,000 km/s. It does not use the speed of any packet in flight or of an underfilled packet that may launch.
| Calculated seconds t | Display |
|---|---|
| t below 170000 | t / 3600 with thousands separators and up to one decimal place, followed by “hours” |
| t from 170000 up to below 1700000 | t / 86400 with thousands separators and up to one decimal place, followed by “days” |
| t of 1700000 or more | t / 86400 as a whole number with thousands separators, followed by “days” |
This formatting affects the display only. Launch and movement do not round quantities or travel time to this precision.
Normal government-stockpile export
Section titled “Normal government-stockpile export”For every other population it recalculates Mass Driver capacity with a destination required. It then runs mining, industrial projects, ground training and replacements, and terraforming before the normal packet launch. The launch runs only when capacity is above zero. Military academy graduation follows. Shipyard work, fuel refining and MSP production, which need total population above zero, come later still. Fresh local mining can therefore enter this export, while the earlier consumers can remove stock first. See production dispatch and order.
The capacity is whole-number(Mass Driver count) x 5,000 tons per year. It does not use the summary capacity that sums each installation’s MassDriverValue (DIM_PlanetaryInstallation) times its amount, described under readers of the value columns. No technology, destination capacity or distance modifier enters the capacity. A form of the capacity update that does not require a destination differs only by skipping the no-destination test.
For each mineral, let S be the current stock and R its reserve. The exportable amount is max(S - R, 0), counted only for stocks that are not zero. E is the sum of the exportable amounts. C, the export budget, is capacity x elapsed years.
| Order | Operation | Consequence |
|---|---|---|
| 1 | Go through the mineral list, skip stocks equal to zero, and sum only positive stock minus reserve. | A stock below its reserve contributes nothing. |
| 2 | Stop when E is below 1. | Exactly one ton passes. A total below one ton stays at the colony. |
| 3 | Issue a packet ID and create the packet. Record the destination, race, system and the source’s coordinates. | The ID is issued before the mineral transfer and before the packet joins the game. |
| 4 | Set the fraction f to 1. When E is above C, f = C / E. |
Every positive mineral surplus gets the same fraction. No mineral fills first. |
| 5 | Go through the list again, skip the empty None entry, and export surplus x f for each positive surplus. |
Each amount is added to the packet and subtracted from the colony stock and from its record of mineral changes (FCT_PopMDChanges). |
| 6 | Sum the packet contents. Add the packet to the game only when TotalSize is above 0. |
A packet ID can be issued without a packet being created. |
| 7 | Set speed to 1000 x C / TotalSize. |
A packet that fills the budget travels at the base speed. An underfilled one travels faster. |
| 8 | For a source that is not an NPR, record the contents as Sent by Mass Driver (DIM_MineralDataType 12). |
This record comes after the physical debit and after the packet joins the game. |
The mineral list runs None, Duranium, Neutronium, Corbomite, Tritanium, Boronide, Mercassium, Vendarite, Sorium, Uridium, Corundium, Gallicite. The None entry always reads as zero. All real minerals use the shared fraction, so the list order does not consume a shrinking budget. The arithmetic stays decimal, with no explicit rounding down, rounding up or rounding to the nearest value. Decimal division precision can affect the final sum and the derived speed.
The launch itself does not check that a destination is set, that the source has Mass Drivers, that elapsed time is positive or that the receiver has Mass Drivers. In the production tick, the positive-capacity gate after the recalculation stands in front of it. A destination saved earlier is used as it stands. No unused budget and no per-mineral remainder carries into the next launch.
Civilian purchase packets
Section titled “Civilian purchase packets”Civilian output builds its own packets inside the mining step and does not use the stockpile launch. The disposition is chosen when civilian mining production is above zero and the body still has mineral deposits. The Purchase Minerals and Tax Civilian Mining choice on the Mining tab is stored in FCT_Population.PurchaseCivilianMinerals.
| Situation | Disposition |
|---|---|
| NPR | Purchase locally, before the purchase setting or the destination is considered. |
| Player race, Purchase Minerals, no destination | Purchase locally. |
| Player race, Purchase Minerals, destination set | Purchase civilian output for mass driver export. |
| Player race, Tax Civilian Mining | Tax civilian mining. Only the government share stays local. |
A player purchase records its cost, 250 wealth per whole Civilian Mining Complex per year times elapsed years, before any output is extracted. The tax choice instead credits 125 wealth per whole complex per year times elapsed years. The export choice checks only that a destination is set. It does not require positive normal capacity, Mass Drivers at the source or the receiver, or any stock above reserve.
For each mineral with a deposit, the mined amount is total mining production x deposit accessibility x elapsed years, capped at the deposit amount. The civilian share is civilian mining production / total mining production x mined amount. In export mode the government portion goes into local stock, credited only when the mined amount exceeds the civilian share. The civilian portion goes directly into the new packet. Packet size is the sum of the diverted minerals. The packet joins the game only when its size is above 0, and it keeps the base speed of 1,000 km/s. This path makes no normal stockpile debit, no debit of the mineral change record, no Sent by Mass Driver record and no mining usage record. It applies no proportional budget and no underfill speed boost. The wealth side is under civilian mining and fuel receipts.
The same production tick can therefore create a civilian packet and then a normal packet holding eligible government or local stock, because mining runs before the normal launch. Reserves protect only the normal packet. Once a packet exists, both kinds are processed in the same way. See mining and mineral availability.
Scheduling and movement
Section titled “Scheduling and movement”Packets already in flight move once per movement and logistics subpulse, after fleet and missile movement and combat work. Game time has already advanced by the full subpulse before packets move. Each packet moves for the full subpulse length (FCT_Game.SubPulseLength), not for a fleet’s remaining order time. See the subpulse timeline.
Strategic production runs after the subpulse loop. It runs when current game time minus the last construction cycle time is strictly greater than the Construction Cycle Time (FCT_Game.MinConstructionPeriod) of the Game Information window. A packet created there gets no movement for the elapsed production interval. Its normal motion starts at a later movement pass. See the strategic construction cycle order.
Each movement pass resolves every packet in this order.
| Priority | Test | Result |
|---|---|---|
| 1 | No destination population is set, or the destination population’s ID is no longer among the game’s populations | Mark for removal and go on to the next packet. |
| 2 | Look up the coordinates of the destination population’s current body (SystemBodyID). Both come back exactly zero |
Log an Orders Not Possible event (DIM_EventType 42) reading “Destination of mass driver packet cannot be found”. The packet keeps its contents and position. |
| 3 | Speed x subpulse length is at least the straight-line distance |
Add all packet minerals to the destination stock and its record of mineral changes. Record Received from Mass Driver (DIM_MineralDataType 13) when the destination’s current race is not an NPR. Mark for removal. |
| 4 | Otherwise | Move the packet toward the resolved point by this subpulse’s distance. |
| 5 | After every packet | Remove every packet marked for removal. |
The body lookup reads the body’s current Xcor and Ycor when the body ID exists. Otherwise it returns (0, 0). The lookup does not check which system the body is in, so it enforces no same-system rule. A real body at (0, 0) takes the same not-found path as a missing body.
Distance is Euclidean, sqrt(dx² + dy²). Partial movement covers a floating-point fraction of that distance and updates only Xcor and Ycor. No partial mineral delivery occurs. At exact equality, arrival wins. On arrival the packet is not moved onto the target before removal. No leftover time is calculated and delivery is not split across the pulse.
Packet arrival makes no receiver Mass Driver check and applies no receiver throughput limit. It compares no ownership and resolves no impact damage, collision or hostile interception. These absences describe how the game resolves packets, not what a physical mass driver ought to require.
Destination changes and loss
Section titled “Destination changes and loss”| Change after launch | Consequence |
|---|---|
| The source selects a new destination or None | Packets built later use the new destination. Packets in flight keep the destination captured at launch. |
| The source colony is removed | A packet holds no link to its source, so nothing is invalidated. The packet keeps flying to its destination. |
| The source or destination loses its Mass Drivers | Packets in flight are not rechecked for installations. |
| The destination body moves or its coordinates change | The next subpulse reads the destination body’s current coordinates and steers toward them. |
| The destination population’s body changes | The packet follows that population’s current SystemBodyID, not an endpoint saved at launch. |
| The destination changes race through a control transfer | The same population receives the minerals under its current owner. The receipt record checks whether its current race is an NPR. The packet keeps its captured owner. |
| The destination population is removed | The next packet pass marks and removes the packet. The cargo is added nowhere and the source gets no refund. |
| The destination body ID is missing but the population still exists | The (0, 0) lookup result logs the event and the packet stalls. It does not take the removed-population path. |
| A system cleanup targets the packet’s stored system | The packet is removed directly. |
A control transfer clears the captured colony’s own outgoing mass driver destination. It does not rewrite incoming packets. The transferred colony moves to the new race’s survey record of the system, so the destination lists of its former owner’s colonies may no longer offer it. A packet in flight is never checked against that list again. The check for a removed destination looks only for the population ID. It does not check that the population under that ID is the one the packet was sent to.
A race sees a packet on the tactical map when the packet’s stored system and owner match, whatever the destination’s current owner. The label reads “Mineral Packet to” followed by the destination’s current name, the size in tons and the speed in km/s, each rounded to a whole number. When the Packet Content box on the tactical map is checked, the contents follow. The path line starts at the increment-start position, which refreshes each time an increment is prepared. Packet movement does not advance LastXcor and LastYcor.
Worked examples
Section titled “Worked examples”These made-up examples assume destination coordinates that are not zero, default constants, positive elapsed time and no other consumers or errors in between.
Normal shipment and mineral allocation. Two Mass Drivers and 0.1 elapsed years give C = 2 x 5000 x 0.1 = 1000 tons. Duranium stock of 900 with a reserve of 100 gives 800 exportable. Neutronium 600 with a reserve of 200 gives 400. E = 1200, so f = 5/6. About 666.6667 Duranium and 333.3333 Neutronium enter one packet, leaving about 233.3333 and 266.6667 at the colony. The size is about 1000 tons and the speed about 1000 km/s. Decimal division drives the actual arithmetic, not these displayed four-place approximations.
Stock shortage and underfill. With the same 1000-ton budget, only 200 Duranium above reserve gives a 200-ton packet at 1000 x 1000 / 200 = 5000 km/s. No other mineral is substituted. When the total positive surplus is 0.9 tons, no packet is created. Exactly 1 ton passes the threshold and would travel at 1,000,000 km/s for that budget. The launch has no speed cap.
Arrival boundary and partial pulse. A 1000 km/s packet 60,000 km from a destination that is not at (0, 0) arrives in a 60-second pulse, because the travel distance equals the remaining distance. At 60,001 km it instead moves 60,000 km, keeps its entire contents and stays one kilometre short for a later pulse. No fraction of the minerals is credited at the first boundary.
Destination loss. A launched 200-ton packet whose destination population is removed loses its contents when the next packet pass removes it. The source stock was already debited. When only the body’s entry disappears while the population survives, the coordinates resolve to (0, 0). The packet then stays in flight and logs the missing-destination event. A valid body at (0, 0) produces the same stall.
Civilian bypass. Suppose extraction produces 600 tons, civilian production is one-half of total production and the purchase and export disposition is selected. The direct packet receives 300 tons at 1000 km/s. Government stock receives 300 tons. Even a normal capacity of zero does not cap this packet. A later normal launch needs its own positive-capacity gate and can export eligible government stock separately.
Persistence and failure limits
Section titled “Persistence and failure limits”| Data | Save and reload |
|---|---|
| Packet ID, launch race, launch system and destination population | Saved as IDs in FCT_MassDriverPackets (PacketID, RaceID, SysID, DestID). Loading requires the destination population first, then the race, then the system to exist. Otherwise the row is skipped. |
Packet contents, TotalSize, Speed |
All eleven minerals, the size and the speed are restored from their stored values. Loading does not recompute speed or size. |
| Current, last and increment-start coordinates | All six coordinate values are saved and restored. |
| Removal mark | Not saved or loaded. A new packet starts unmarked. |
| Source population | Not part of a packet and not saved. |
| Colony destination | Saved from the current destination into FCT_Population.MassDriverDest. Loading links it only when that population ID exists. |
| Colony reserve minerals | Saved and restored per element. |
| Colony Mass Driver capacity | Not saved with the population. Recalculated during production. |
Reload therefore links a surviving packet to the population stored under DestID. It does not repeat the Mass Driver and survey checks of the destination list. It does not compare the destination’s owner with the packet’s stored owner. A row with a missing reference is dropped without returning its minerals. The saved minerals decide what arrives, while TotalSize is kept separately for display.
Errors roll nothing back. Each failing step shows its function error, ends there and keeps the changes it already made. The steps are these.
- A packet launch failure shows
Function #2092and ends that launch. The rest of the production tick still runs. - A mining failure shows
Function #2093and ends the mining step. - A capacity failure shows
Function #2161and ends the capacity update. - A packet movement failure shows
Function #1412. One error report covers the whole packet pass and the removal sweep, so a failure skips the remaining packets and the sweep. - A packet save failure shows
Function #1450and ends packet saving. - A packet load failure shows
Function #1147and ends packet loading.
None of these steps and none of the stored packet data provide mineral escrow, retry identifiers or a compensation record.
On arrival, for example, the minerals are added to the destination before the receipt record and the removal mark. This order does not give atomic exactly-once delivery if a step in between fails. This describes the failure boundary. It does not claim that the normal arithmetic fails. Saving deletes this game’s earlier packet rows before it inserts the current packets, and the packet save’s error handling rolls nothing back. The normal save wraps this step and the other save steps in one SQLite transaction and commits it at the end. The packet save handles its own errors and does not pass them to the surrounding save.
In the paths described here the game has no collision physics, no defensive interception of packets, no physical need to keep Mass Drivers at the receiver and no automatic rerouting to another colony after a loss. Fleet cargo rules and civilian shipping cancellation do not supply these behaviours to packets.
Concept map
Section titled “Concept map”- State and units, what a colony and a packet store for export.
- Destination selection and settings, the Mining tab list, reserve entry and travel-time label.
- Normal government-stockpile export, capacity, proportional allocation and packet speed.
- Civilian purchase packets, the direct civilian packet that bypasses capacity and reserves.
- Scheduling and movement, movement, delivery and removal in each subpulse.
- Destination changes and loss, live coordinate lookup, capture and removal.
- Persistence and failure limits, saved packet rows, rebuilt links and error boundaries.
- Production dispatch and order, the consumers that run before and after the launch.
- Strategic construction cycle order, when population production and export run.
- Subpulse timeline, when packets move and increment-start positions refresh.
- Mass Driver installation, row 24 of
DIM_PlanetaryInstallationthat sets the count. - Readers of the value columns, the summary capacity that export does not use.
- Reserves and industrial accounting, reserves protect only normal export.
- Mining and mineral availability, civilian share, purchase and tax.
- Mineral usage records, the Sent by and Received from Mass Driver entries.
- Civilian mining and fuel receipts, the wealth side of purchase and tax.
- Mining establishment, expansion and depletion, civilian sites that start with one Mass Driver.
- Capacity before work and live stock during work, the resource-consumer order.
- Minerals and reserve levels, fleet mineral cargo as the alternative to packets.
- Logistics interruption and reservations, fleet cargo interruption that packets do not share.
- Control transfer sequence, clears the captured colony’s outgoing destination.
- Population absorption and deletion, removes a destination and so its incoming packets.
- Full system cleanup, removes the packets of a deleted system.
- Object identity and reload, how saved IDs become links again.
- Event types, interrupts and hidden events, the Orders Not Possible event a stalled packet logs.
Resources
Section titled “Resources”Related community documentation and developer posts. These may describe a different game version.