Oxygen
Game version 01.079.008
Player oxygen consumption rate | 0.063 O2 / s | |
Internal suit oxygen tank capacity | 60 O2 | About 15.9 minutes worth of breathing |
Oxygen Bottle item | 100 O2 | |
Large grid oxygen tank | 100,000 O2 | |
Small grid oxygen tank | 50,000 O2 | |
1m3 Atmosphere | 1 O2 | |
Large grid block of air | 15.625 O2 |
Contents
Production
Oxygen is created when an Oxygen Generator processes Ice. Ice is found in some Asteroids, much the same as any other kind of ore. Oxygen Farms also generate small amounts of oxygen from sunlight only.
Storage
Oxygen can be stored in Oxygen Tanks (on ships and stations), in Oxygen Bottles (items), and in a space engineer's suit.
A player's suit's oxygen is depleted while the player is wearing a helmet. The remaining oxygen capacity is displayed in the left status panel of the player's HUD in [%], as is the current status of the helmet (if worn or not). A suit's stored oxygen is replenished from a Medical Room, a Cockpit, or a Fighter Cockpit attached to a Conveyor system with an Oxygen Tank or oxygen source (generator or farm). If there is an Oxygen Bottle in a player's inventory when the suit's oxygen level drops below 30% then oxygen will be transferred from the bottle(s) to refill the suit's oxygen storage.
Consumption
Space Engineer
A player consumers oxygen at a rate of 0.063 O2 / s. This oxygen is taken from the player's suit while their helmet is on (worn) and from the pressurized room of a large ship or station they are in while their helmet is off. If a player is sitting with their helmet is off in a cockpit with conveyor access to oxygen then oxygen will be consumed out of the conveyor system.
If their suit's oxygen is ever depleted then the character will slowly asphyxiate while their helmet is on. A player with their helmet off while not in a pressurized room or a cockpit with conveyor access to oxygen will also asphyxiate. Asphyxiation results in death if an oxygen supply is not restored immediately.
- The player can even suffocate in their suit while standing in a pressurized room, if they do not take off their helmet before the suit's internal O2 tank is depleted!
Atmosphere
An airtight room (larger than a single block) of a large ship or station can be pressurized with oxygen by an Air Vent with conveyor access to oxygen. The air vent can also depressurize such a room, taking with oxygen out and returning it to the conveyor system (if storage is available). A Graph traversal / flood-fill algorithm is used to fill the enclosed space with oxygen. The algorithm traverses through the volumetric grid and checks for enclosed and open areas. 1 stored unit of oxygen is 1m3 and blocks with air (no matter what shape) take 15.625 units of oxygen to fill.
Assuming you are in an airtight, pressurized room entirely full of oxygen:
- Welding an airtight block into its final build stage destroys the air that was in its block.
- Grinding an airtight block down from its final build stage to anywhere under it will expand the room by one block, dropping room pressure.
- Closing a door destroys the air that was in its block.
- Welding a block or closing a door creating a 1-block "room"/space will destroy the air that was in that space.
- Losing a fully pressurized large-grid block of air destroys 15.625 units of oxygen.
Notes on Oxygen Mechanics
- Oxygen propagation between producers (farms, generators) and consumers (tanks, vents, cockpits, medical rooms) is determined by conveyor rules, but conveyors themselves do not store, contain, or otherwise mutilate oxygen. Oxygen travels instantly between these endpoints.
- Oxygen is drained uniformly from all non-stockpiling tanks.
- Consumers are sorted by priority and, if any oxygen production remains, the rest is uniformly distributed among tanks. Oxygen consumption priority is defined by block type, but currently all consuming blocks appear to have a priority of 0.
- Non-stockpiling tanks are constantly rebalanced with a delay-over-time, subtracting oxygen from some tanks and adding an equal amount to others.
- There's such a thing as 'oxygenated room' object, which contains oxygen block structures, all of which are identical in function (and in volume!) regardless of what actual block occupies the grid coordinate.
- The authority on how much oxygen exists is the room object, rather than the block. Rooms are pressurized and depressurized as a whole, blocks track the room's oxygen level and adjust to match it over time. Oxygen, once released into the environment becomes 'air', for lack of a better word -- a considerably different entity, which is still called 'oxygen' in the code -- and individual block's state does not affect the state of the room until rooms are completely recalculated. Vents directly affect the room oxygen amount, rather than the individual block position they're in; they create 'air' and consume 'oxygen', or vice versa when depressurizing. Medical rooms directly fill spacesuits by consuming oxygen from tanks and adding an equal amount to the suit store.
- Blocks do have individual air level values and constantly adjust this value to the value that would be average for the entire room based on it's size and total air level. The entire room is supposed to have the pressure equalized in 1.5 seconds -- this is a constant. Notice that this is done by each block individually, i.e. air does not move between blocks -- when a block adds or removes air, it does not consider anything except it's current air level and the room's total level and number of blocks in it.
- Air is consumed by characters by directly subtracting it out of the room amount, rather than the current block they're in. Which room they're in is identified by looking for the closest oxygen block structure that is part of a pressurized (i.e. enclosed) 'room'. The code looks at a character's position (a point at your feet) and tries to find which block in which grid to consider by determining which block center the character point is closest to; the first room that is enclosed should be picked, but the order the blocks are considered is dependent on grid orientation, which is why it's possible to stand in an oxygenated room next to a door leading out to vacuum and still suffocate.
- Rooms are defined by propagating block neighbours in all cardinal directions, kind of like flood fill algorithm in a 2D paint program, but in 3D with quirks. Blocks diagonally from each other are not neighbours and rooms do not propagate through corners. Some interesting points about this:
- Rooms are temporary structures, they are regularly recalculated when blocks are added to the grid, removed from it, or door state changes.
- The presence or absence of vents does not affect whether something is considered a room or not. The splitting logic works on the entire grid, starting from a particular corner and trying to create new rooms when others end up until the grid is done.
- State of being pressurized, which is the word the code uses to mean an enclosed room, is actually completely distinct from the actual oxygen amount.
- Two types of airtight blocks exist - those that are airtight as a whole, so all their walls are airtight, and others. The algorithm considers the direction it arrived to the block from when determining whether the block is airtight for the purposes of enclosing a room, and uses some complicated logic based on mount points (the points on a block where it can connect to other blocks). Blocks with build stages are only airtight when on the last build stage, regardless.
- When rooms are recalculated, should a previously existing room be split in two by a closing door, the pressure will be retained in both of the new rooms from the room that previously occupied the same blocks in the grid. This is done by adding up the total amount of air in every individual block that a newly created room contains if a room previously existed in the same grid block coordinates. This is the only time the amount of air within an individual block seems to matter for anything. Should the total amount end up larger than what the room can contain based on the number of blocks in it, it will be discarded, so building a block destroys air, rather than displacing it.
- Notice that a closed door is airtight from both directions. When closed, any air that it might have contained is discarded since it's not part of either room it separates anymore -- so yes, closing doors destroys air in that block, every time it happens. Closing a door to a room in which pressure has yet to equalize across all blocks can sometimes result in not destroying air.
- Only rooms which end up larger than exactly one block are considered to exist. If the room size calculation ends up with a room exactly one block large then it will be discarded along with every oxygen block that would be part of it. If you end up in a completely enclosed 1x1x1 room with a vent, you will suffocate anyway.
- The amount of oxygen it takes to fill a room to 100% depends on the room's grid size, it's exactly a cube of that grid size. The grid size itself though is not exactly an obvious value and depends on a lot of code that has nothing to do with oxygen, but comments seem to indicate meters are meant to be the unit, so one unit of oxygen should result in exactly one cubic meter of air, and one large block should contain exactly (2.5m)3 = 15.625m3 of air.
- There are no efficiency values surrounding pressurization or depressurization. Air vents are 100% efficient, creating exactly the same number of oxygen units that they just sucked out of the room air. But since 'air' is not kept track of as cleanly as inventory oxygen is, it may still end up not being 100% efficient. 'air' gets created and destroyed pretty frequently, particularly so if you open or close any doors while blocks don't have an even pressure. Closing and opening doors inside environment that is not evenly pressurized can destroy much more air than just closing a door does if you do it before 1.5 seconds elapse.
- There is no evidence grinding or welding in a room alters room air content directly, but it alters blocks themselves and thereby forces a room recalculation, so indirectly it does affect air. Welding and grinding that results in separating 1x1x1 block areas will destroy air in it. Welding an airtight block will destroy air it occupied. Grinding a block will increase the room size and decrease room pressure.
- When a newly created room detects that it is no longer enclosed while the room that previously occupied the same space was, it finds the holes and creates a depressurization push and particle effect on the holes. The effect affects everything except blocks within a 5m range from the hole and the magnitude of the force applied depends on distance from the hole. Forced depressurization does not create air in the block it depressurized into.