This happens because edges cease processing when the delta between their zones is small enough. This is normally a fine optimization, but when it results in a room at 4kPa with a window open to space, it breaks imurshuns.
Two main changes to solve this problem without too much cpu cost:
1) Stop edges from sleeping if one side is a hard vacuum. This ensures that a zone doesn't freeze at a low-but-non-zero pressure when touching hard vacuum.
2) Prevent #1 from causing the edge to stay alive for ages while pressures asymptotically approach zero as they are repeatedly equalized but only half is dumped to space. (Would happen if ZoneA---ZoneB---Space arrangement exists) by detecting when the total amount of air left is small enough that it would normally sleep anyway, and just setting it to zero.
The end outcome is that behavior is mostly the same as before, except when zones have an open path to unsimulated space, they will reach equilibrium at zero instead of semi-random lowish values.
``/mob/dead/observer`` -> ``/mob/observer/dead``
``/mob/eye`` -> ``/mob/observer/eye``
Reason being that they are similar in that they both don't interact with
the world in any way. Some procs were shared, some checks as well, and
it overall makes more sense this way. Plus, there were no ``/mob/dead``
mobs.
More tweaks to IPC fixes.
Merge resolution/compile fixes.
Further work on properly integrating, updating and fixing prosthetic options.
Repathed internal organs to organ/internal.
More work on full synthetics, changelings, overheating.
Working on getting organs to qdel properly and spawn properly when robotized.
Finalized some overheating values, added remaining prosthetic icons.
Finalizing the testing version of the full prosthetic bodies branch.
Added suit cyclers to the autolathe and map.
Fixing runtime errors.
Fixing errors.
Changelog.
Replacing limb and organ strings with constants.
Prevented brainless species from becoming full cyborgs.
Fixed issues with brain/MMIs renaming themselves inappropriately.
Various fixes and oversights.
Adjusts fire_fuel_energy_release to compensate for fixed fire heat release.
Adjusts liquid fire burn parameters so that liquid fuel fire heat release and
burn duration is unaffected.
Conflicts:
code/setup.dm
Fixes calculate_firelevel() not counting oxidizer when determining the ratio
of reactants to other gases. As well firelevel calculation is now done
separately for burning gas and burning liquid.
Adjusted FIRE_LIQUID_BURNRATE_MULT so that liquid burn rate is unaffected by
this fix, which will result in generally higher firelevels and thus faster
burn rates.
Conflicts:
code/setup.dm
Adjusts fire_fuel_energy_release to compensate for fixed fire heat release.
Adjusts liquid fire burn parameters so that liquid fuel fire heat release and
burn duration is unaffected.
Fixes calculate_firelevel() not counting oxidizer when determining the ratio
of reactants to other gases. As well firelevel calculation is now done
separately for burning gas and burning liquid.
Adjusted FIRE_LIQUID_BURNRATE_MULT so that liquid burn rate is unaffected by
this fix, which will result in generally higher firelevels and thus faster
burn rates.
The reaction progress needed to be clamped before used_fuel is
calculated, or else the will bleed into each other even though they are
clamped properly afterwards.