This page follows a game log event from the moment a game rule writes it to the windows that show it and the tables that keep it. Game time and state refresh covers the subpulse cycle and the auto-turn cycle that react to interrupts. Event colours covers colour editing, the colour picker presets and colour import and export. Contact notifications covers which contact tracks produce a notification and what each intelligence event means. Designer mode and Spacemaster-only events covers designer mode and the Spacemaster-only marker as a mode feature. Each mechanic that writes an event, such as combat, production or survey, has its own page. This page lists which game activity writes which event type but does not restate those mechanics.

The game log is a list of events grouped by time increment. Each increment keeps its own event list, its ID (IncrementID), start time (GameTime) and length in seconds (Length), the columns of FCT_Increments. The length defaults to 5. The game keeps every increment indexed by its ID and treats one increment as current. The current increment receives new events.

Each event holds these items. The “Stored as” column names the FCT_GameLog column that keeps the item in a save.

Item Stored as Meaning
Recipient race RaceID Recipient race. Every display filter, hidden check and colour lookup reads this race.
Event type EventType Row of the event type catalogue DIM_EventType.
System SystemID Optional system. The Events window shows the recipient’s known name for it.
Population PopulationID Optional population, used to select a colony in the Economics window.
Increment IncrementID Owning increment.
Category IDType Category chosen by the game rule that logs the event, not by the event type.
Time Time Game seconds at the moment of logging.
Coordinates Xcor, Ycor Map coordinates used to centre the tactical map.
Overlay hit box not saved Top and bottom y of the event’s row on the tactical map overlay, set while the overlay draws.
Spacemaster-only marker SMOnly Marks an event as for the Spacemaster only. No display filter reads it.
Message MessageText Message shown in the log.

Each DIM_EventType row holds EventTypeID, the integers CombatDisplay and DamageDisplay, the yes or no flags AttackEvent, PlayerInterrupt and AIInterrupt, and Description. The game reads the whole table into memory once each time a game loads. Only the two interrupt flags and Description are used by the rules described here. CombatDisplay, DamageDisplay and AttackEvent are read when a game loads and nowhere else.

The game defines 241 event types in all. The catalogue has 240 rows. Nine catalogue IDs (25, 35, 116, 155, 177, 186, 187, 203 and 204) are not among the 241, and ten of the 241 have no catalogue row.

The game logs every event in the same way. A game rule that logs an event gives the event type, the message, the recipient race, an optional system, an optional population, the map coordinates and the category. Logging also accepts an admin-only marker, a Spacemaster-only marker and an interrupt target race, but every logging rule leaves both markers off and gives no target race.

The game writes events from 492 places. Each place names its category itself. 488 places name a fixed event type. Four places take their event type from the contact selection described in contact event type selection.

Event logging runs these steps in order.

  1. Create a new event record.
  2. When no current increment is set, make the increment with the largest start time (GameTime) current.
  3. Stop at once when the catalogue has no row for the event type. No event is stored and no interrupt marker is set.
  4. Copy the increment, the catalogue row, the category, the recipient race, the current game time, the coordinates, the Spacemaster-only marker, the message and the population. Copy the system only when one is given.
  5. Append the event to the current increment’s event list.
  6. Set the interrupt markers as interrupt flags and their consumers describes.

The admin-only marker has no effect. The interrupt target needs a target race, and no rule supplies one. The game checks whether the recipient race is an NPR only after the event is added to the list. An event with no recipient race therefore stays in the list, sets no interrupt, and the game shows error Function #1715. The logging routine ends there.

The game creates a new increment at the start of every time step and makes it current. The new increment starts at the current game time and takes the selected increment length. When the subpulse setting is automatic, or when the selected length divided by the selected subpulse exceeds 500, the game picks the subpulse length itself and rounds the increment length down to a whole number of subpulses. The subpulse length never exceeds the increment length. New game creation creates one increment before Sol is generated, so events written during creation have an increment. Loading a game starts with no current increment. The first event logged before the next time step goes to the loaded increment with the largest start time.

An event’s Time is the game time when the event is logged. During the subpulses of a time step the clock advances before the subpulse work runs, so an event raised during a subpulse carries the end time of that subpulse. Events raised after the last subpulse carry the end time of the whole increment.

Two event types that the game does log have no row in the shipped catalogue. Type 48 holds landing failure messages, logged from five places in fleet landing, for example when a ship cannot land because the mothership has insufficient hangar space, or when the destination fleet does not contain the specified mothership. Type 84 holds unable-to-unload messages, logged from nine places in ship unloading, for example when a ship cannot unload minerals or installations for lack of cargo shuttles, or cannot unload ground units because the target ground unit does not exist. With the shipped catalogue, step 3 discards all fourteen messages. A database whose DIM_EventType contains IDs 48 and 84 would log them. The table in event types in the game without a catalogue row lists all ten event types that have no row.

Two game-wide markers carry interrupts. The increment interrupt stops the subpulses of the current time step. The player interrupt stops the auto-turn cycle.

Recipient race Catalogue flag tested Markers set
NPR AIInterrupt Increment interrupt
NPR whose type lacks AIInterrupt An interrupt target race that is itself an NPR Increment interrupt. No rule supplies a target.
Not an NPR PlayerInterrupt Increment interrupt and player interrupt

The test uses the recipient race’s NPR flag. An NPR event whose type has only PlayerInterrupt sets nothing, and a player event whose type has only AIInterrupt sets nothing. Event logging does not test the category, the hidden-event list or the colour settings, so a hidden event type still interrupts. The shipped catalogue marks 71 types with PlayerInterrupt and 17 with AIInterrupt. Thirteen types carry both flags. They are Ship Destroyed (27), Damage Report (28), System Damaged (97), Jump Point Detected (138), New Alien Race (147), New Hostile Contact (181), New System Discovered (195), Ramming Attempt (227), New Alien Ship (233), Invalid Unload System (266), Successful Ramming Attack (365), Ship Rammed (366) and System Destroyed (368). Four carry only AIInterrupt. They are Missile Launch (15), Target Hit (20), Conversion Halted (276) and New Combat Contact (285).

One rule sets the increment interrupt without an event. It runs when a race detects a fleet that has just transited a jump point, during the sensor checks for transiting fleets. When the detecting race holds a record of the transiting race with ContactStatus Hostile, the rule sets the increment interrupt. For an NPR detector it first gets or creates a transit point of interest at the jump point. The direct interrupt applies to player and NPR detectors alike, and it does not set the player interrupt. When the detecting race has not charted the jump point, the same rule logs Jump Point Detected (138) in category Jump Point and marks the jump point charted. That event can then set both markers through its catalogue row.

Three places react to the markers.

  • Subpulses. Each time step clears the increment interrupt just before its subpulses start. Subpulses continue while the marker is clear or the increment length is exactly 5, and while the elapsed seconds are below the increment length.
  • Movement. A fleet moving inside a subpulse sets its remaining subpulse seconds to zero when the increment interrupt is set.
  • Auto turns. Without auto turns, a time increment button runs one increment. With auto turns on, the button clears the player interrupt once, then repeats whole increments until the marker is set or auto turns are switched off. This is the only place in the game that clears or reads the player interrupt.

The consequences follow from that order. An interrupt shortens the current increment at the next subpulse boundary, and the increment’s length becomes the elapsed seconds. An increment interrupt raised during the preparation of a time step is cleared by the reset of the same step, and one raised after the last subpulse is cleared by the reset of the next step, so neither shortens anything. With auto turns on, a player interrupt raised at any point in a step stops the auto-turn cycle after that step. Game time and state refresh covers the full timing and the length-5 exception.

Contact notifications pick their event type through two selections. Both take the observer’s contact status for the contact race. The possible statuses are Hostile, Neutral, Friendly, Allied, Civilian, None and Combat. The status comes from the detecting race’s record of that alien race, and it is None when the contact has no race or the detecting race holds no record of it.

The new-contact selection maps each status to one type.

Status Event type
Hostile New Hostile Contact (181)
Neutral New Neutral Contact (182)
Friendly New Friendly Contact (183)
Allied New Allied Contact (184)
Combat New Combat Contact (285)
Civilian, None Civilian Contact (191)
Selection fails with error Function #465 New Hostile Contact (181)

The update selection also takes the contact itself and checks whether the detecting race’s survey of the contact’s system records that alien race as the controlling race of the system. It checks in this order.

  1. Hostile returns Hostile Contact Update (206) with no control check.
  2. Neutral with a matching controlling race returns Neutral Contact Update - AC (362).
  3. Neutral otherwise returns Neutral Contact Update (207).
  4. Friendly with a matching controlling race returns Friendly Contact Update - AC (363).
  5. Friendly otherwise returns Friendly Contact Update (208).
  6. Friendly with a matching controlling race would return Allied Contact Update - AC (364). Step 5 has already returned for every Friendly status, so this step never returns anything.
  7. Allied returns Allied Contact Update (209) with no control check.
  8. Any other status, including Combat and None, returns Civilian Contact Update (210). When the selection fails, the game shows error Function #466 and the result is New Hostile Contact (181).

The report of new and re-established contacts uses the new-contact selection or the update selection, and logs the result in category Ship. It skips Civilian statuses before either selection, so Civilian Contact (191) comes only from a None status. Explosion, electronic warfare impact and secondary contacts bypass both selections and log New Combat Contact (285) directly in category Combat. When a race updates a ship contact, a strength change and a re-established contact use the update selection as well. These log in category Ship and skip Civilian statuses first. Contact notifications covers which tracks reach these reports.

Categories and the type-to-category mapping

Section titled “Categories and the type-to-category mapping”

The game has 19 event categories. The rule that writes an event also gives its category. The catalogue has no category column, and the game has no table that maps an event type to a category. The Events window lists every category in the order below. Its label is the category’s display name, or the category’s internal name when it has no display name. Categories 2, 16, 17, 18 and 19 have no display name, so the window shows their internal names. Category 16 appears as the words Missile Salvo run together with no space.

A log point is one place in the game rules that writes an event. The “Short name” column gives the name this page uses for the category in table cells.

Value Short name Window label Log points Double-click opens
0 All All Event Categories 3 nothing
1 Population Production Population Production Events 10 Economics, Industry tab
2 Commander Commander 33 nothing
3 Population Mining Population Mining Events 7 Economics, Mining tab
4 Population Environment Population Environment Events 9 Economics, Environment tab
5 Population Shipbuilding Population Shipbuiding Events (spelled this way in the window) 7 Economics, Shipyards tab
6 Population Ground Units Population Ground Units Events 12 Economics, GU Training tab
7 Population Research Population Research Events 13 Economics, Research tab
8 Combat Results Combat Results Events 49 tactical map
9 Ship Ship-based Events 115 tactical map
10 Fleet Fleet-based Events 100 tactical map
11 Jump Point Jump Point Events 4 tactical map
12 System System Events 8 tactical map
14 Population Summary Population Summary Events 20 Economics, Summary tab
15 Intelligence Intelligence 52 tactical map
16 Missile Salvo Missile Salvo, shown as one word 7 tactical map
17 Combat Combat 14 tactical map
18 SYUpgrade SYUpgrade (shipyard upgrade) 10 Economics, Shipyards tab
19 Diplomacy Diplomacy 19 nothing

The log point counts cover every place in the game that writes an event, with the four contact selection points counted under Ship. Value 13 does not exist.

The category filter in the Events window is an equality test, so an event logged with category All appears only when the window shows all categories. Because the logging rule chooses the category, one event type can appear under several categories. In the catalogue, 21 of the 194 types that the game logs are logged under more than one category. Mineral Shortage (64), for example, is logged under Population Production, Population Shipbuilding, Population Ground Units and SYUpgrade, from the mineral limits on industrial projects and on shipyard tasks. Event type Diplomacy (180) and category Diplomacy (19) are separate numbers in separate lists.

The tables below list all 240 rows of DIM_EventType in the game database as shipped, with the columns Description, CombatDisplay, DamageDisplay, AttackEvent, PlayerInterrupt and AIInterrupt. An edited database can change these values. Each row sits under its primary category. The primary category is the one that most of the type’s log points pass, with the lower category value winning a tie. The “Other categories” column counts log points under the remaining categories. “Log points” counts the distinct places that write the type, and “Logged during” names up to two of the game activities that write it. The contact types count the contact selection points that normally return them. Error fallbacks do not add log points to these counts. Rows that no game activity logs form a separate table.

The display and attack columns hold integers or yes or no values, and no rule in play reads them. The PlayerInterrupt and AIInterrupt columns drive interrupt flags and their consumers. The activities behind the rows belong to their own pages, among them space combat resolution, ground combat and conquest, boarding and ship capture, commander lifecycle, production mechanics, shipyard development and ship work, terraforming mechanics, salvage and archaeology and exploration surveys and discovery.

The stored descriptions of rows 342 (Boarding Damage) and 343 (Acid Damage) end with a space. The stored description of row 117 (Message Continued) starts with two spaces. Row 355 has a description of a single space and shows as blank.

ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
212 New Shipping Line 0 0 no no no 1 none shipping line creation
368 System Destroyed 0 0 no yes yes 1 none system disasters
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
1 Production 0 0 no yes no 1 none industrial projects
64 Mineral Shortage 0 0 no yes no 8 Population Shipbuilding 1, Population Ground Units 2, SYUpgrade 2 mineral limit on industrial projects, mineral limit on shipyard tasks
135 Fuel Shortage 0 0 no no no 1 none industrial projects
276 Conversion Halted 0 0 no no yes 1 none industrial projects
279 Insufficient Population 0 0 no no no 1 none industrial projects
319 Fighter Construction 0 0 no no no 1 none industrial projects
320 Production Started 0 0 no no no 1 none industrial projects
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
90 Commander Promoted 0 0 no no no 6 none commander promotion
98 New Naval Officer 0 0 no no no 1 none commander creation
99 Commander Health 1100 1100 no no no 10 Ship 2, Combat 2 commander health, retirement and service medals
129 Command Assignment 0 0 no no no 6 none commander assignment to a ship, commander assignment to a ground formation
256 New Administrator 0 0 no no no 1 none commander creation
257 New Scientist 0 0 no no no 1 none commander creation
280 Commander Experience 0 0 no no no 1 none commander bonus increase
289 Senior Officer Required 0 0 no no no 2 none naval admin command preparation
291 New Ground Force Officer 0 0 no no no 1 none commander creation
292 Retirement 0 0 no no no 2 none commander health, retirement and service medals
296 Medal Awarded 0 0 no no no 1 none medal award
325 Commander Restored 0 0 no no no 2 none the Restore button of the Commanders window
370 Scientist Experience 0 0 no no no 1 none commander bonus increase
371 Administrator Experience 0 0 no no no 1 none commander bonus increase
372 Unassigned Experience 0 0 no no no 1 none commander bonus increase
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
66 Mineral Exhausted 0 0 no no no 2 none sorium harvesting, mining
143 Geo Survey Complete 0 0 no no no 1 none ground geological survey
211 Civilian Mining Colony 0 0 no no no 4 none civilian mining complex expansion, civilian mining colony founding
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
76 Gas Removed 0 0 no yes no 2 none terraforming
77 Terraforming Report 0 0 no yes no 1 none terraforming
81 Ice Sheet Melted 0 0 no yes no 1 none hydrosphere change
284 Change to Dominant Terrain 0 0 no no no 4 none dominant terrain update
316 Ice Sheet Frozen 0 0 no no no 1 none hydrosphere change
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
3 Ship Repair 0 0 no yes no 2 none shipyard tasks
4 Ship Refit 0 0 no yes no 1 none shipyard tasks
7 Ship Scrapped 0 0 no yes no 1 none shipyard tasks
317 Shipyard Task Abandoned 0 0 no yes no 2 Population Summary 1 combat reports and aftermath, automatic refit queue
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
9 Unit Trained 0 0 no yes no 1 none ground unit training and replacements
82 Morale Increase 0 0 no no no 1 none ruin installation recovery
101 Factory Restored 0 0 no no no 2 none ruin recovery, ruin component recovery
299 Breakthrough Achieved 0 0 no no no 1 none ground combat round
323 Formation Training Task 0 0 no no no 1 none start of queued training tasks
359 Ground Unit Unloaded 0 0 no no no 2 none unloading a ground formation, unloading all ground formations
369 No Replacements Required 0 0 no no no 1 none ground unit training and replacements
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
60 Research Completed 0 0 no yes no 5 none research completion
63 Inactive Lab 0 0 no yes no 1 none research projects
88 Research Started 0 0 no no no 1 none research projects
127 Tech Downloaded 0 0 no yes no 1 none ship technical data download
229 Overallocation of Labs 0 0 no no no 1 none research projects
238 Tech Data Learned 0 0 no no no 2 none component disassembly
367 Interrogation Update 0 0 no no no 2 none prisoner interrogation
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
15 Missile Launch 90 90 yes no yes 2 Ship 1 combat reports and aftermath, anti-missile point defence launches
220 Boarding Combat 0 0 no no no 4 Ship 2 boarding combat
294 Acid Burn 1056 1056 yes no no 2 Ship 1 ongoing acid damage, combat reports and aftermath
301 Element Loss Summary 0 0 no no no 3 none ground combat aftermath
304 Element vs GUC Report 0 0 no no no 1 none ground combat reports
331 Energy Point Defence 0 0 no yes no 1 none combat reports and aftermath
332 STO Point Defence 0 0 no yes no 1 none combat reports and aftermath
333 AMM Point Defence 0 0 no yes no 2 none combat reports and aftermath
334 Ship Combat - Energy 0 0 no yes no 3 none combat reports and aftermath
335 Ship Combat - Missile 0 0 no yes no 3 none combat reports and aftermath
336 STO Combat 0 0 no yes no 2 none combat reports and aftermath
337 Missile vs Ship 0 0 no yes no 3 none combat reports and aftermath
338 Attacked by STO 0 0 no yes no 1 none combat reports and aftermath
339 Attacked By Energy Weapons 0 0 no yes no 4 none combat reports and aftermath
340 Attacked By Missiles 0 0 no yes no 3 none combat reports and aftermath
341 Attacked By AA Fire 0 0 no yes no 1 none combat reports and aftermath
342 Boarding Damage 0 0 no yes no 1 none combat reports and aftermath
344 Collaterall Damage 0 0 no yes no 1 none combat reports and aftermath
345 Damage Summary 0 0 no yes no 1 none internal damage
346 Fighter Point Defence 0 0 no yes no 1 none combat reports and aftermath
347 Fighter Combat - Energy 0 0 no yes no 2 none combat reports and aftermath
348 Fighter Combat - Missile 0 0 no yes no 2 none combat reports and aftermath
349 Fleet PD Summary 0 0 no yes no 1 none point defence summaries
352 Bombardment Summary 0 0 no no no 1 none bombardment damage summary
354 Population PD Summary 0 0 no yes no 1 none point defence summaries
355 (blank) 0 0 no no no 2 none point defence summaries
365 Successful Ramming Attack 1 1 yes yes yes 1 none combat reports and aftermath
366 Ship Rammed 1 1 yes yes yes 3 none combat reports and aftermath
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
2 Ship Construction 0 0 no yes no 4 Population Production 1, Population Shipbuilding 1 shipyard tasks, industrial projects
10 Commander Update 1090 1090 no no no 4 none ship removal, ship evacuation
14 Targeting Problem 40 0 yes yes no 9 none missile salvo target selection, population target selection
16 Out of Ammo 50 0 yes yes no 4 none fleet missile launch at assigned targets, ship missile launches
27 Ship Destroyed 1080 1080 no yes yes 1 none internal damage
28 Damage Report 1000 1000 no yes yes 2 Combat 1 combat reports and aftermath
58 No Spare Parts 0 0 no no no 1 none damage control repairs
59 Successful Repair 0 0 no no no 1 none damage control repairs
65 Low Fuel 0 0 no no no 4 none low fuel warnings
80 Harvester Capacity 0 0 no no no 1 none sorium harvesting
97 System Damaged 0 0 no yes yes 3 none boarding combat losses, component damage
111 Components Scrapped 0 0 no no no 2 Population Summary 1 colony component scrapping, ship component scrapping
119 Fire Delay 20 0 yes no no 4 none combat fire resolution, direct fire
122 Overhaul Complete 0 0 no no no 1 none maintenance, overhauls and failures
133 Civilian Construction 0 0 no no no 1 none shipping line construction
139 Civilian Activity 0 0 no no no 1 none shipping line handling of damaged ships
146 Maintenance Problem 0 0 no no no 3 none internal damage, maintenance failure while firing
147 New Alien Race 0 0 no yes yes 1 none first contact with an alien race
178 Ship Surrender 0 0 no yes no 2 none ship surrender
181 New Hostile Contact 0 0 no yes yes 1 none new and re-established contact reports
182 New Neutral Contact 0 0 no no no 1 none new and re-established contact reports
183 New Friendly Contact 0 0 no no no 1 none new and re-established contact reports
184 New Allied Contact 0 0 no no no 1 none new and re-established contact reports
191 Civilian Contact 0 0 no no no 1 none new and re-established contact reports
201 Overhaul Clock Reduced 0 0 no no no 2 none shipyard tasks
206 Hostile Contact Update 0 0 no yes no 3 none new and re-established contact reports, ship contact update
207 Neutral Contact Update 0 0 no no no 3 none new and re-established contact reports, ship contact update
208 Friendly Contact Update 0 0 no no no 3 none new and re-established contact reports, ship contact update
209 Allied Contact Update 0 0 no no no 3 none new and re-established contact reports, ship contact update
210 Civilian Contact Update 0 0 no no no 3 none new and re-established contact reports, ship contact update
219 Boarding Attempt 0 0 no no no 9 none boarding attempt from a move order
227 Ramming Attempt 0 0 no yes yes 2 Fleet 1 ramming attempt
232 New Alien Class 0 0 no no no 1 none new alien class record
233 New Alien Ship 0 0 no yes yes 1 none new alien ship record
253 Shore Leave Complete 0 0 no no no 1 none deployment, morale and shore leave
254 Life Support Failure 0 0 no no no 3 none deployment, morale and shore leave
277 Lifepods Launched 0 0 no no no 1 none ship evacuation
283 Ship Overcrowded 0 0 no no no 1 none deployment, morale and shore leave
285 New Combat Contact 1088 1088 no no yes 2 Combat 1 new and re-established contact reports
290 Maximum Fleet Training 0 0 no no no 1 none fleet training
297 Boarding Underway 0 0 no no no 4 none boarding combat
305 Ship vs GUC Report 0 0 no no no 1 none ground combat reports
310 Orbital Support Reassigned 0 0 no no no 1 none ground combat round
311 Ground Support Reassigned 0 0 no no no 2 none ground combat round
313 Target Out of Range 1 0 no no no 1 none combat fire resolution
318 Training not Possible 0 0 no no no 1 none fleet training
321 Deployment Time Exceeded 0 0 no no no 1 none deployment time morale
326 Incorrect Ordnance 0 0 no yes no 4 none fleet missile launch at assigned targets, ship missile launches
327 Fleet Transfer 0 0 no no no 2 none fleet transfer to another race
350 Civilian Ship Scrapped 0 0 no no no 2 none fleet move orders, shipping line retirement of a replaced ship
351 Damage Control 0 0 no no no 1 none internal damage
357 Alien Salvage 0 0 no no no 1 none wreck salvage completion
361 Maintenance Failure 0 0 no no no 3 none internal damage, maintenance failure while firing
362 Neutral Contact Update - AC 0 0 no no no 3 none new and re-established contact reports, ship contact update
363 Friendly Contact Update - AC 0 0 no no no 3 none new and re-established contact reports, ship contact update
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
41 Orders Assigned 0 0 no no no 25 none join operational group standing order
42 Orders Not Possible 0 0 no yes no 18 none cycling of completed move orders
44 Ruins Located 0 0 no yes no 3 System 1, Missile Salvo 1 fleet move orders, geological survey by missile salvos
45 Orders Completed 0 0 no yes no 11 none detachment order
46 Insufficient Fuel 0 0 no no no 1 none fuel use during movement
54 Transit Failure 0 0 no yes no 4 none sub-fleet detachment for a transit, transit check
71 Fuel Exhausted 0 0 no no no 2 none fleet move orders, movement of a fleet anchored to another fleet
83 Pickup Failed 0 0 no yes no 10 Ship 4 loading a ground formation into troop transports
92 Life Pod Expired 0 0 no no no 2 none lifepod expiry
93 Search and Rescue 0 0 no no no 2 none survivor rescue
107 Fleet Message 0 0 no yes no 1 none fleet move orders
108 Wreck Salvaged 0 0 no no no 1 none wreck salvage completion
128 Tech Data Scanned 0 0 no no no 1 none technical data scanning
140 Illegal Order 0 0 no yes no 3 none fleet move orders
145 No Freighter Overhaul 0 0 no no no 1 none start of an overhaul
195 New System Discovered 0 0 no yes yes 5 none jump point exploration
260 0 0 no no no 3 System 1, Missile Salvo 1 fleet move orders, geological survey by missile salvos
266 Invalid Unload System 0 0 no yes yes 2 none colonist unloading
288 Ground Survey Potential 0 0 no no no 2 Missile Salvo 1 fleet move orders, geological survey by missile salvos
295 Intact Ship Salvaged 0 0 no no no 1 none intact ship salvage completion
312 Installations Salvaged 0 0 no no no 2 none population salvage
353 Transit Delay 0 0 no no no 1 none transit check
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
138 Jump Point Detected 0 0 no yes yes 4 none detection of a fleet transiting a jump point, sensor checks
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
37 System Surveyed 0 0 no yes no 1 none gravitational survey completion
157 Successful Espionage 0 0 no yes no 7 All 1, Intelligence 3 random alien race intelligence reward
218 Geological Survey Data 0 0 no no no 1 none geological survey treaty sharing
314 Ground Combat Intelligence 1 0 no no no 1 none ground combat round
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
57 Ruins Exploited 0 0 no yes no 3 Population Ground Units 1 xenoarchaeology
115 Pop Status Change 0 0 no no no 1 none political status progress
141 New Mineral Deposit 0 0 no no no 4 Fleet 1, Missile Salvo 1 fleet move orders, geological survey by missile salvos
142 Accessibility Increase 0 0 no no no 1 none mineral generation after a ground survey
148 Unrest Increasing 0 0 no no no 1 none unrest and stability
286 Admin Command Update 0 0 no no no 2 none admin command relocation to a naval headquarters
287 Training Task Abandoned 0 0 no no no 1 none combat reports and aftermath
324 Planet Destroyed 0 0 no yes no 1 none orbital decay
328 Installation Scrapped 0 0 no no no 2 none installation scrapping, ordnance scrapping
329 Ground Units Scrapped 0 0 no no no 1 none ground unit scrapping
360 Stockpile Warning 0 0 no no no 2 none colony production
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
106 Intelligence Update 0 0 no no no 29 Ship 1 alien class weapon intelligence, alien ground unit class weapon reveal
258 POWs Rescued 0 0 no no no 2 none colony control transfer
293 New Alien Population 0 0 no no no 1 none new alien population record
298 New Alien Ground Unit 0 0 no no no 1 none new alien ground unit class record
300 Ground Attack Summary 0 0 no no no 2 none ground combat reports
302 Attack vs GUC Summary 0 0 no no no 2 none ground combat reports
303 Ground Defence Summary 0 0 no no no 2 none ground combat aftermath
306 GUC vs GUC Summary 0 0 no no no 2 none ground combat reports
307 Formation Attack Summary 0 0 no no no 1 none ground combat reports
308 Formation Loss Summary 0 0 no yes no 1 none ground combat aftermath
309 Orbital vs GUC Summary 0 0 no no no 1 none ground combat reports
315 Alien Communication 0 0 no yes no 8 Ship 2, Population Summary 2 territorial claim diplomacy
330 Orbital Support Summary 0 0 no no no 1 none ground combat reports
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
52 Target Lost 41 0 yes no no 2 none missile salvo movement
200 Missile Self-destruct 0 0 no no no 1 none missile salvo movement
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
75 Ground Combat Update 0 0 no yes no 6 none ground combat status update, ground combat surrender
169 Increment Adjustment 0 0 no no no 1 none increment preparation
173 Reparations 0 0 no yes no 1 none colony control transfer
174 Planet Looted 0 0 no yes no 1 none colony control transfer
356 New Wreck Detected 0 0 no no no 1 none wreck creation
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
125 Shipyard Modified 0 0 no yes no 8 none shipyard modification
ID Description Combat display Damage display Attack Player interrupt AI interrupt Log points Other categories Logged during
55 Communication 0 0 no no no 6 none alien communication attempts
180 Diplomacy 0 0 no no no 14 Intelligence 1 diplomatic threshold changes

No game activity passes these IDs to event logging, either directly or through a contact selection. The rows still load into memory with the catalogue, can appear in saved logs written by other game versions, and can carry colour or hidden settings. IDs 25, 35, 116, 155, 177, 186, 187, 203 and 204 are also not among the 241 event types the game defines.

ID Description Combat display Damage display Attack Player interrupt AI interrupt
0 No Event Type 0 0 no no no
11 Shield Recharge 0 0 no no no
12 Targeting 10 0 yes no no
17 No Missile Assigned 60 0 yes yes no
18 Weapon Reloading 70 0 yes no no
19 Chance To Hit 95 95 yes no no
20 Target Hit 100 100 yes no yes
21 Target Missed 110 110 yes no no
22 Weapon Recharging 80 0 yes no no
25 System Intact 0 0 no no no
26 Secondary Explosion 1070 1070 no no no
35 Team Skill 0 0 no no no
43 Minerals Located 0 0 no no no
53 Missiles Lost 42 0 no no no
87 Jump Gate Underway 0 0 no no no
91 Conditional Order 0 0 no no no
100 Mine Restored 0 0 no no no
116 Insufficient JGC 0 0 no no no
117 Message Continued 0 0 no no no
149 Unrest Decreasing 0 0 no no no
155 Morale Increase 0 0 no no no
177 Overkill 102 102 no no no
179 Breathable Atmosphere 0 0 no yes no
186 Wreck Contact 0 0 no no no
187 Mineral Packet Contact 0 0 no no no
203 Thermal Contact Lost 0 0 no no no
204 GPD Contact Lost 0 0 no no no
215 Outstanding New Officer 0 0 no no no
216 Exceptional New Officer 0 0 no no no
217 Promising New Officer 0 0 no no no
221 Crew Losses 0 0 no no no
224 Wreck Components 0 0 no no no
228 Empire in Debt 0 0 no no no
235 Crew Grade Increase 0 0 no no no
237 Shield Deactivation 0 0 no no no
245 Tractor(s) Released 0 0 no no no
252 Crew Morale Falling 0 0 no no no
255 Probe Out of Fuel 0 0 no no no
265 Time Check 0 0 no no no
278 Crew Escape 0 0 no no no
281 Replacement Unit Disbanded 0 0 no no no
282 Recovery Failure 0 0 no no no
322 Commander Unassigned 0 0 no no no
343 Acid Damage 0 0 no yes no
358 Test Data 0 0 no no no
364 Allied Contact Update - AC 0 0 no no no

Event types in the game without a catalogue row

Section titled “Event types in the game without a catalogue row”

These event types have no DIM_EventType row in the game database as shipped. Event logging stops before storing any event whose type has no catalogue row. Type 48 holds landing failure messages and type 84 holds unable-to-unload messages, as writing an event to the log describes. The other eight have no log point.

Value Log points Categories Logged during
48 5 Fleet 5 landing on assigned motherships, landing on a specified mothership
61 0 none none
62 0 none none
78 0 none none
84 9 Ship 8, Fleet 1 mineral unloading to reserve levels, unloading a ground formation, installation unloading
86 0 none none
126 0 none none
137 0 none none
152 0 none none
236 0 none none

A hidden event type is a record with a RaceID and an EventID. All records for a game live in one game-wide list.

  • Test. An event type is hidden for a race when the list holds a record with that race’s RaceID and the event type. The game scans the list from the start on each test and stops at the first match.
  • Toggle. Toggling removes the first matching record when one exists and otherwise adds a new one.
  • Window control. The Hide Event button toggles the event type of the selected row for that event’s recipient race, not for the race chosen in the window. With Show All Races checked, a button press can therefore hide a type for another race. With no event row selected, the button shows “Please select an event to hide or unhide”.

The hidden list changes what three displays show and nothing else.

Display Effect of a hidden type
Events window increment selection The type never counts toward the event limit, even with Show All Events checked.
Events window rows The row is skipped unless Show All Events is checked.
Tactical map overlay The row is always skipped. Show All Events has no effect here.

Event logging stores and saves a hidden event like any other and sets its interrupt markers. No AI or simulation rule tests whether a type is hidden. Only the two Events window displays and the overlay do.

An event colour entry holds an event type, a text colour, an alert (background) colour and a race ID. Each race keeps its entries indexed by event type ID. The Events window creates entries through its Back Colour, Text Colour, Copy Colour and Import Colours buttons. Copy Colour copies the entry to all races. When a population is granted independence, the new independent race receives a copy of every colour entry of the race that granted independence.

The game gives a new race no default colours. The game database as shipped contains a DefaultEventColour table, but no rule in play reads it. When a race has no entry for a type, the Events window gives the event type cell no colour of its own for either text or background. The overlay then draws the type in its standard light yellow (RGB 255, 255, 192) with no rectangle.

The list colours only the event type cell of the first line of each event. The rest of the row keeps the list’s normal colours. Event colours covers the colour dialogues, the presets and the CSV format.

The Events window shows one race’s log by default. When it opens it restores its saved position, fills the category list, copies the game’s stored day limit (MaxEventDays) and event limit (MaxEventCount) into its two text boxes over their form defaults of 30 and 300, fills the race list and sets its tooltips. It shows the Show All Races check box only in Spacemaster mode. The race list holds player races, plus NPRs in designer mode, ordered by race title.

Control Behaviour
Race list Selects the race and refreshes. It passes the race change to other open windows, except when the window is opening or when another window set the race.
Category list Sets the category filter and refreshes. Changes are ignored while the window is opening, so the window opens on All.
Event Days text box On leaving the box, stores the value rounded up in MaxEventDays and refreshes.
Max Events text box On leaving the box, stores the value rounded up in MaxEventCount and refreshes.
Show All Events Shows hidden types in the rows.
Show All Races Adds every player race’s events, and NPR events in designer mode. Visible only in Spacemaster mode.
Refresh Rebuilds the list.
Hide Event Toggles the selected event’s type for its recipient race.
Text Colour, Back Colour, Copy Colour, Import Colours, Export Colours Colour editing, covered by event colours.
Full Height Sets the window height to the screen working area minus 10 and relabels itself Normal Height, or returns to 890 pixels.
Text File Hidden and does nothing when clicked.
Double-click Opens the event’s context.
Keys Alt+F4 closes the window. Other keys go to the selected race’s toolbar hotkeys.

Each refresh rounds both text box values up to whole numbers and rebuilds the list from the selected race, both check box states and the category. Text that is not a number makes the game show an error, Function #3197 when leaving the day box, Function #3198 when leaving the event box, or Function #647 during a refresh. The end of every time increment refreshes every open Events window. Scrapping and disassembly actions in the Economics and Naval Organization windows also refresh it.

The list builds in two passes.

  1. It clears the list and adds a header row with Race, Event Type, System and Event.
  2. It sets the cutoff to the current game time minus the day limit times 86400 seconds, and takes the increments whose start time is strictly greater, newest first.
  3. It adds whole increments to the display set and adds each increment’s visible count to a running total. An event counts when its race is the selected race, or when Show All Races is checked and the race is not an NPR or designer mode is on, and its type is not hidden for its race. The pass stops after the first increment that lifts the total above the event limit. The limit therefore admits whole increments and can exceed the maximum. The count ignores the category filter and Show All Events.
  4. It walks the chosen increments oldest first. Each one gets a blank row and a row with the formatted end time (start time plus length) and the text “Last Time Increment N seconds (dd:hh:mm:ss)”.
  5. It applies the race filter, then the category filter when the category is not All, then the hidden filter unless Show All Events is checked.
  6. Each event shows the recipient’s race title, the type’s Description, the recipient’s known name for the system or “N/A”, and the message wrapped to 770 pixels. Continuation lines belong to the same event, so a double-click on any line opens that event.
  7. It scrolls the last row into view.

The selected race’s own events pass the race filter even when that race is an NPR. A player can select an NPR only in designer mode. The window ignores the Spacemaster-only marker.

The tactical map draws the overlay on each repaint while its Events check box is checked. The overlay shows the increment with the largest start time, which is the latest time step or, after a load, the latest saved increment.

  • Filter. It drops NPR events unless designer mode is on, even when the NPR is the active race. It then keeps the active race’s events, or every race’s events when the all-races check box is checked. It skips hidden types while drawing. It applies no category filter.
  • Layout. The header row sits at y 152 and shows the increment end time and the text “Last Time Increment N seconds (dd:hh:mm:ss)”. The first event row sits at y 172. Each further line adds 20. The event type column starts at x 345, the system column at 495 and the message column at 615. With all races shown, those three move right by 150 and the race title takes x 345. Messages wrap at 670 pixels.
  • Colour. With a colour entry, the overlay fills a 145 by 18 rectangle at the event type, starting 2 pixels above the text, in the alert colour and draws the type in the text colour. Other text uses light yellow (RGB 255, 255, 192).
  • Hit box. It stores the top and bottom y of each drawn event as that event’s overlay hit box.

The overlay keeps the filtered list, hidden events included, as the list of displayed events. A double-click with x from 345 to 1285 while the Events check box is checked opens the first listed event whose range from top (included) to bottom (excluded) contains the click y. The overlay does not reset the hit box of a hidden event it skips. A new event starts with both bounds at 0 and never matches. An event drawn once and then hidden keeps its old bounds, and the game does not exclude it from the hit test.

The all-races check box is visible only in Spacemaster mode. Both check states are restored from the active race and saved on the race record as chkEvents and chkEventsAllRaces. A new race starts with both unchecked.

A double-click in the Events window or on the overlay opens the event’s context. Nothing happens when there is no event or the event has no recipient race.

  • Map categories. Fleet, Ship, Jump Point, Combat Results, Missile Salvo, Intelligence, System and Combat centre the tactical map on the event’s coordinates in the event’s system, as seen by the recipient race. When that race has no survey record for the system, nothing happens. When the system is already selected, the map recentres and refreshes. Otherwise it recentres and selects the system.
  • Economics categories. Population Production opens the Industry tab, Population Research the Research tab, Population Summary the Summary tab, Population Mining the Mining tab, Population Ground Units the GU Training tab, Population Shipbuilding and SYUpgrade the Shipyards tab, and Population Environment the Environment tab. When any Economics window is open, every open one switches to that tab and selects the event’s population. Otherwise a new Economics window opens on that tab and population.
  • Other categories. All, Commander and Diplomacy open nothing.

The category alone decides the target. An event logged without a population in an Economics category leaves each open Economics window’s current population selected, because no colony in the window’s list matches. A new window opens with no population selected. The game does not check for a missing population.

These examples use catalogue flags from the game database as shipped.

A player interrupt shortens a one-day step. The player selects 86,400 seconds with automatic subpulse. The automatic subpulse rule picks 1,800 seconds for lengths from 28,801 seconds up to but not including 86,401 seconds, giving 48 subpulses. During subpulse 10 a player race receives New Alien Race (147), which has PlayerInterrupt 1. Event logging sets both markers. The game finishes subpulse 10 and stops at the boundary, so the increment’s length becomes 18,000 seconds. The end-of-increment work still runs once. With auto turns on, the auto-turn cycle then stops because the player interrupt is set.

An NPR ignores the player flag. An NPR receives Production (1), which has PlayerInterrupt 1 and AIInterrupt 0. For an NPR event logging tests only AIInterrupt, so neither marker changes and the time step runs its full length.

A hidden type still interrupts. A player hides Ship Destroyed (27). A later Ship Destroyed event for that race sets both markers, stops the time step and stops auto turns. The overlay and the Events window skip the row, and the event is saved.

The event limit admits whole increments. The window uses 60 days and a limit of 300. The three newest increments in range hold 120, 150 and 40 visible events. The running total is 120, then 270, then 310. The pass stops after the third increment because 310 is greater than 300, and the window lists up to 310 events. With the category set to Fleet, the window still selects those three increments and then shows only their Fleet events.

Retention tests the increment start. At save, the current game time is T. An increment that started at T - 157,680,000 fails the strict test (less than 157,680,000 seconds, five years) and its events are dropped, even an event logged an hour after that start. An increment that started one second later is kept.

The load limit counts skipped rows. A save holds 12,000 log rows inside the retention window, and 500 of the newest belong to a race that no longer exists. The load reads the 10,000 rows with the highest IncrementID, skips the 500, and restores 9,500 events. The 2,000 oldest rows stay in the table until the next save rewrites it without them.

A control-race update. A Friendly alien controls a system in the detecting race’s survey. A strength change on that alien’s ship logs Friendly Contact Update - AC (363) in category Ship. In a system the alien does not control, the same change logs Friendly Contact Update (208). An Allied controller always gives Allied Contact Update (209).

A save writes increments first, then the game log and event colours. Hidden events are written later, after the ship class templates. The catalogue table DIM_EventType is read-only. No save writes it.

The save deletes the game’s FCT_Increments rows and writes every increment with IncrementID, GameID, GameTime and Length. It applies no age limit to increments.

The save then deletes the game’s FCT_GameLog rows. It writes the events of every increment whose start time is less than five years old, that is, the current game time minus the increment’s GameTime is less than 157,680,000 seconds. The test reads the increment’s start time, not the event’s Time. Each row carries IncrementID, GameID, RaceID, SMOnly, Time, EventType, MessageText, SystemID, Xcor, Ycor, IDType and PopulationID. IDType stores the category. SystemID and PopulationID are 0 when the event has none. The running game never removes events from memory, so retention applies only at save.

When a game loads, the game starts a fresh increment list, loads the static definitions including the event types, then loads all increments. After systems, races and populations are loaded, it loads the game log, then event colours, then hidden events.

The log load selects the game’s FCT_GameLog rows ordered by IncrementID descending, with a limit of 10,000 rows. For each row it applies these rules.

Linked record When it is missing
Increment Row skipped.
Event type Row skipped.
Race Row skipped.
System Event kept with no system.
Population Event kept with no population.

The load restores the category from IDType, the time, the coordinates, SMOnly and the message, and appends the event to its increment’s list. The limit applies when the rows are selected, before the skip rules, so skipped rows still use places. The rows are ordered only by IncrementID. Inside one increment, the reloaded order is the order the database returns, which the game does not fix. Increments whose events fell outside the limit or the retention window still load, with empty lists. Such increments still count as whole increments in the Events window selection, with zero events.

The Spacemaster-only marker is set when the event is written and is saved and loaded with the event. No rule in play sets it to true. No display reads the marker. Events written during play carry false, and loaded rows keep their stored value. Designer mode and Spacemaster-only events covers the same marker from the mode side.

Hidden events, colours and window settings

Section titled “Hidden events, colours and window settings”

The save deletes the game’s FCT_HideEvents rows and writes every hidden-event record with RaceID, EventID and the current GameID. When a game loads, hidden-event rows are read from FCT_HideEvents with no GameID filter. A row is kept when the game has a race with that RaceID or the RaceID is 0 or less, and the event type exists. A row from another game therefore loads when its race ID is 0 or less, or when it matches a race ID in this game, and the next save writes it under this game’s ID. Duplicate rows are not removed on load, and the toggle removes only the first match.

The save deletes the game’s FCT_EventColour rows and writes each distinct colour entry with EventTypeID, RaceID, GameID, AlertColour and TextColour, the two colours as ARGB integers. On load, a row with an unknown event type is skipped, alpha is forced to 255, and the entry is dropped when the race does not exist.

FCT_Game stores MaxEventDays and MaxEventCount, which default to 60 and 300. FCT_Race stores the overlay check states chkEvents and chkEventsAllRaces.

The save keeps neither interrupt marker, the current increment, the overlay hit boxes, or the Events window’s category and check box states. After a load no increment is current until the next time step or the next event, as writing an event to the log describes.

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