Events
Random events will occur periodically. To ease the player into the game, there will be a "warm-up" period at the start of a new game during which no events can occur. The interval between events will vary between a minimum and maximum duration, which will be based on real time; time will not be counted while the game is paused or closed, but should resume when a saved game is loaded1.
Events will have preconditions that need to be met when they are selected; if this check fails, the event is ignored and gameplay continues. This will provide the impression that events become more frequent -- and somewhat more regular -- as the game progresses without the need for complex logic to regulate that.
Events can be re-selected, but only after a number of other events have occurred (excluding any events that fail their preconditions). This will be implemented by removing selected events from the pool and inserting them into a queue; after resolving an event, the first event in the queue will be removed and returned to the pool. Due to the nature of preconditions making early-game events less likely to occur, there may not be any need to pre-populate the queue at all, instead relying on these "failed" events to naturally add to the queue's length; if, however, this does not seem to work in practice, the queue can be pre-populated with random events drawn from the pool.
Examples
These examples are intended to help convey the kind of events desired, not necessarily to be implemented into the game verbatim.
- Meteor Strike: A random tile location is struck by a meteor, causing a hull breach in that room. If the random tile is empty, this event has no effect.
- VIP Visit: A VIP will visit the station in {duration}. Certain amenities must be in place by then or the visit will be canceled. These may include a minimum Food Quality, a hotel room meeting certain criteria, etc. This event can only occur if the station has already reached a minimum level of prestige.
Saved games need to store the remaining time until the next event to prevent potential "save-scumming" that could arise if the event interval were re-calculated from the time of the last event.