diff --git a/code/modules/integrated_electronics/subtypes/atmospherics.dm b/code/modules/integrated_electronics/subtypes/atmospherics.dm index d9a18bc509..26ac3080de 100644 --- a/code/modules/integrated_electronics/subtypes/atmospherics.dm +++ b/code/modules/integrated_electronics/subtypes/atmospherics.dm @@ -115,10 +115,10 @@ source_air = air_contents // Move gas from one place to another - move_gas(source_air, target_air) + move_gas(source_air, target_air, (istype(target, /obj/item/tank) ? target : null)) air_update_turf() -/obj/item/integrated_circuit/atmospherics/pump/proc/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air) +/obj/item/integrated_circuit/atmospherics/pump/proc/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air, obj/item/tank/snowflake) // No moles = nothing to pump if(source_air.total_moles() <= 0 || target_air.return_pressure() >= PUMP_MAX_PRESSURE) @@ -132,7 +132,10 @@ if(pressure_delta > 0.1) var/transfer_moles = (pressure_delta*target_air.return_volume()/(source_air.return_temperature() * R_IDEAL_GAS_EQUATION))*PUMP_EFFICIENCY var/datum/gas_mixture/removed = source_air.remove(transfer_moles) - target_air.merge(removed) + if(istype(snowflake)) //Snowflake check for tanks specifically, because tank ruptures are handled in a very snowflakey way that expects all tank interactions to be handled via the tank's procs + snowflake.assume_air(removed) + else + target_air.merge(removed) // - volume pump - // **Works** @@ -165,7 +168,7 @@ direction = SOURCE_TO_TARGET target_pressure = min(PUMP_MAX_VOLUME,abs(new_amount)) -/obj/item/integrated_circuit/atmospherics/pump/volume/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air) +/obj/item/integrated_circuit/atmospherics/pump/volume/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air, obj/item/tank/snowflake) // No moles = nothing to pump if(source_air.total_moles() <= 0) return @@ -182,7 +185,10 @@ var/datum/gas_mixture/removed = source_air.remove_ratio(transfer_ratio * PUMP_EFFICIENCY) - target_air.merge(removed) + if(istype(snowflake)) + snowflake.assume_air(removed) + else + target_air.merge(removed) // - gas vent - // **works** @@ -379,9 +385,20 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir() removed.set_moles(filtered_gas, 0) //Check if the pressure is high enough to put stuff in filtered, or else just put it back in the source - var/datum/gas_mixture/target = (filtered_air.return_pressure() < target_pressure ? filtered_air : source_air) - target.merge(filtered_out) - contaminated_air.merge(removed) + if(filtered_air.return_pressure() < target_pressure) + if(istype(filtered, /obj/item/tank)) + filtered.assume_air(filtered_out) + else + filtered_air.merge(filtered_out) + else + if(istype(source, /obj/item/tank)) + source.assume_air(filtered_out) + else + source_air.merge(filtered_out) + if(istype(contaminants, /obj/item/tank)) + contaminants.assume_air(removed) + else + contaminated_air.merge(removed) /obj/item/integrated_circuit/atmospherics/pump/filter/Initialize() @@ -449,10 +466,18 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir() if(transfer_moles <= 0) return + var/snowflakecheck = istype(gas_output, /obj/item/tank) + var/datum/gas_mixture/mix = source_1_gases.remove(transfer_moles * gas_percentage) - output_gases.merge(mix) + if(snowflakecheck) + gas_output.assume_air(mix) + else + output_gases.merge(mix) mix = source_2_gases.remove(transfer_moles * (1-gas_percentage)) - output_gases.merge(mix) + if(snowflakecheck) + gas_output.assume_air(mix) + else + output_gases.merge(mix) // - integrated tank - // **works** diff --git a/html/changelogs/AutoChangeLog-pr-13636.yml b/html/changelogs/AutoChangeLog-pr-13636.yml new file mode 100644 index 0000000000..75124f759f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13636.yml @@ -0,0 +1,4 @@ +author: "SiliconMain" +delete-after: True +changes: + - tweak: "Engi department has gas masks in loadout" diff --git a/modular_citadel/code/modules/client/loadout/mask.dm b/modular_citadel/code/modules/client/loadout/mask.dm index 0d7e32552e..9468c9303d 100644 --- a/modular_citadel/code/modules/client/loadout/mask.dm +++ b/modular_citadel/code/modules/client/loadout/mask.dm @@ -14,3 +14,9 @@ name = "Joy mask" path = /obj/item/clothing/mask/joy cost = 3 + +/datum/gear/mask/gas + name = "Gas Mask" + path = /obj/item/clothing/mask/gas + cost = 2 + restricted_roles = list("Chief Engineer", "Atmospheric Technician", "Station Engineer") //*shrug