Barotrauma is a 2D multiplayer resource management game published by Undertow Games and FakeFish. The game was released for free as a pre-alpha version on 2015-07-31, and has received regular updates since. An Early Access commercial release was launched on 2019-06-05, on Steam, with the game's full release on 2023-03-13. The game's source code can be found on GitHub.
Barotrauma takes place in the distant future, during an era where humanity is technologically advanced enough to achieve manned interplanetary space travel. The setting of the game is on Europa, one of Jupiter’s moons, which has become colonized since its initial arrival in 2022. Over many decades, colonies and outposts have been forced to establish under the layer of ice covering the surface of the moon, due to the surface being too irradiated for survival.
Beneath the ice layer is a vast ocean, used as a transport network between colonies and as a source for natural resources. The ocean also allowed for the creation of transportation shafts that interconnect the colonies throughout the moon. The ocean itself is inhabited by a number of aquatic creatures, as well as naturally forming cave systems. Over time, the colonies of Europa became more distant and disconnected from Earth, until fifty years ago (putting the present year reasonably at around 2100 - 2200), sometime after the initial colonization of Europa, all contact was mysteriously lost with the rest of civilization for reasons unknown.
The people stranded on Europa were left to fend for themselves, cut off from the supply chain of Earth. With limited resources and the ever advancing Jovian Radiation, the abandoned settlers were forced to delve deeper and deeper into the vast, deadly oceans of Europa.
Each crew member is assigned a different job. This job determines the character's starting skills (chosen randomly within a certain range), and gear.
Each Job has its own unique set of Talents, when they have gained enough experience, players earn Talent points, which allow them to pick a Talent. These talents can grant various buffs or bonuses to the player, the whole crew or even the submarine or unlock recipes for unique items. These items can also be crafted by anyone if a Bot has unlocked the recipe.
Some jobs (captain,
security,
medical doctor) are capped at a maximum number of players. When the maximum has been reached, players will no longer spawn new characters with that job.
However, existing characters with those jobs will respawn if the player rejoins the server regardless of whether or not it would exceed the cap. The cap does not apply to bots which can be purchased over and above the limit.

The captain is responsible for commanding the rest of the crew and trying to keep everything running smoothly. The captain's ID card provides access to anywhere in the submarine, excluding the personal cabins of the crew. While captain is no longer a required job, the job is still capped at a maximum of one player per sub.
Responsibilities
- Navigating in the campaign.
- Steering the ship.
- Delegating tasks.
- Adjusting the salary of each crewmember.

Engineers have above-average construction and mechanic skills, but fixing complex mechanical devices is still usually out of their skill set. They are competent at fixing electrical devices however, and are the ones to turn to when the power grid starts failing.
Responsibilities
- Electrical item maintenance.
- Operating the reactor.
- Fabrication of electrical items, devices, and weapons.

Mechanics have high construction and mechanic skills. They can use Welding Tools and Plasma Cutters safely, and are usually the only ones who can fix broken mechanical devices.
Responsibilities
- Mechanical item maintenance.
- Repairing hull breaches and leaks.
- Mining resources and deconstructing them.
- Fabrication of mechanical items, devices, and weapons.

Security Officers are responsible for keeping the submarine safe from threats, both external and internal. They're adapted to their jobs with their Security Gear. This job is capped at a maximum of two players per sub.
Responsibilities
- Keeping crewmates safe.
- Operating turrets.
- Repelling intruders.
- Keeping the order.
- Fabrication of weapons and ammunition.

Medical Doctors are capable of creating various drugs using the Medical Fabricator, as well as diagnosing and treating the myriad afflictions that hinder the crew. This job is capped at a maximum of two players per sub.
Responsibilities
- Keeping crewmates healthy.
- Rescuing and performing first aid on wounded crewmates.
- Fabrication of medical items.
- Researching and refining genetic materials.

Assistants don't have any specific responsibilities or areas of expertise. This job is intended for newcomers to the game, as it allows them to play the game without giving them an important field to work in.
Responsibilities
- Learning.
- Trying not to die horribly.
- Having fun.
Below are some code snippets from the game's Github.
// psychosis
if (Character.Controlled != characterHealth.Character) return;
UpdateFloods(deltaTime);
UpdateSounds(characterHealth.Character, deltaTime);
UpdateFires(characterHealth.Character, deltaTime);
UpdateInvisibleCharacters(deltaTime);
UpdateFakeBroken(deltaTime);
// healthbars
private GUIProgressBar healthBar;
private GUIProgressBar healthBarShadow;
private float healthShadowSize;
private float healthShadowDelay;
private float healthBarPulsateTimer;
private float healthBarPulsatePhase;
// spawn less particles when there's already a large number of them
float particleAmountMultiplier = 1.0f - GameMain.ParticleManager.ParticleCount / (float)GameMain.ParticleManager.MaxParticles;
particleAmountMultiplier *= particleAmountMultiplier;
// light dripping
else if (LerpedFlowForce.LengthSquared() > 100.0f &&
/*no dripping from large gaps between rooms (looks bad)*/
((GapSize() <= Structure.WallSectionSize) || !IsRoomToRoom))
// Create a number input with plus and minus buttons because for some reason the default GUINumberInput buttons don't work when in a GUIMessageBox
static SettingValue CreateGUINumberInputCarousel(GUIComponent parent, LocalizedString description, LocalizedString tooltip, int defaultValue, int valueStep, int minValue, int maxValue, float verticalSize, Action onChanged)
All of the information on this page is taken from Barotrauma's Wiki.