Oxygen
Contents
Vital Statistics
Game version 1.196
Player oxygen consumption rate | 0.063 L/s | This is a flat rate regardless of activity. |
Oxygen Farm max production rate | 0.03 L/s | Requires sunlight. |
Large gridO2/H2 Generator max production rate | 250 L/s | 10 L/kg of ice |
Small gridO2/H2 Generator max production rate | 50 L/s | 10 L/kg of ice |
Internal suit oxygen tank capacity | 60 L | 15 minutes and 52 seconds worth of breathing. |
Oxygen Bottle item | 100 L | 26 minutes and 27 seconds worth of breathing. |
Large gridOxygen Tank | 100,000 L | 18 days, 8 hours, 55 minutes, and 1 second worth of breathing. |
Small gridOxygen Tank | 50,000 L | 9 days, 4 hours, 27 minutes, and 30 seconds worth of breathing. |
1m3 of 100% room pressure | 1 L O2 | About 16 seconds worth of breathing. |
Large grid block of air | 15.625 L | 4 minutes and 8 seconds worth of breathing. |
Small grid block of air | 0.125 L | About 2 seconds worth of breathing. |
Large grid O2/H2 Generator (4,000 L Ice) | 108,108 L | 19 days, 20 hours, 40 minutes, and 1 second of breathing. |
Small grid O2/H2 Generator (1,000 L Ice) | 27,027 L | 4 days, 23 hours, 10 minutes, and 0 seconds of breathing. |
Production
Oxygen is created when an Oxygen Generator processes Ice. Ice is found in some Asteroids and planets, much the same as any other kind of ore. Oxygen Farms also generate small amounts of oxygen from sunlight only but require only electricity and no ice.
Oxygen can also be harvested from a Planet’s atmosphere via an Air Vent, Earth and Alien planet both have varying degrees of oxygen found in their atmosphere. While Ice itself can also be harvested directly from a planet in the form of visible bodies of water which in reality is Ice and can be processed for oxygen and hydrogen. Earth especially is very rich with oxygen, these planets have infinite amounts of oxygen available.
Storage
Oxygen can be stored in Oxygen Tanks (on ships and stations), in Oxygen Bottles (items), and 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 consumes oxygen at a rate of 0.063 O2 / s. This oxygen is taken from the player’s suit while their helmet is on (worn) or from the pressurized room, they are in while their helmet is off. If a player is sitting with their helmet off in a cockpit with conveyor access to oxygen then oxygen will be consumed out of the conveyor system (assuming there is an available oxygen tank).
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 small ship, 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 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 for 1 large block of air, while a small block holds 0.125 units of oxygen.
The minimum safe pressure for a character to have their helmet off and breathe in a pressurized room is 50%, if the character is in a room with some oxygen but not enough to reach 50% pressure they’ll take 1 hitpoint of damage per second; Even if this room’s pressure is tiny any pressure above 0% will do. If the character is in a room with no oxygen whatsoever (or a room that cannot be pressurized due to a leak exposed to space) or in an open space such as an exterior – they will take 7 hitpoints of damage per second. A player in a suit without any oxygen will take the full 7 hitpoints of damage per second and has ~14 seconds to find oxygen or they will die.
Assuming you are in an airtight, pressurized room 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 an ‘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 of the room’s oxygen level and adjusting 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 an 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 its 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 its current air level and the room’s total level and several 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 neighbors in all cardinal directions, kind of like a flood fill algorithm in a 2D paint program, but in 3D with quirks. Blocks diagonally from each other are not neighbors 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.
- The state of being pressurized, which is the word the code uses to mean an enclosed room, is 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 at the block from when determining whether the block is airtight to enclose 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 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 even pressure. Closing and opening doors inside an 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 the 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 the distance from the hole. Forced depressurization does not create air in the block it is depressurized into.
List of Airtight blocks
The list below contains all of the large blocks since only large grids currently are the only ones capable of being pressurized. By default, all blocks that haven’t been fully constructed will not be airtight.
Some blocks placed outside of a room may not seal a room, windows are commonly found to have problems in this area. If placed on the outside, it isn’t considered a seal since the Mountpoints of the frames aren’t directly connected to the neighboring blocks. There are also a few instances of blocks sealing a room while visually it shouldn’t be. Corner-type blocks are sometimes found to have these problems.
Airtight Blocks – All blocks under this designation are airtight (capable of being pressurized) when fully constructed
An outstanding share! I've just forwarded this onto a coworker who had been conducting a little research on this. And…