diff --git a/code/datums/gas_overrides.dm b/code/datums/gas_overrides.dm index 027aa07e6dc..c58d5ad176a 100644 --- a/code/datums/gas_overrides.dm +++ b/code/datums/gas_overrides.dm @@ -1,2 +1,5 @@ /datum/proc/freon_gas_act() - return \ No newline at end of file + return 0 + +/datum/proc/water_vapor_gas_act() // We get it + return 0 // You vape \ No newline at end of file diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 07d70bfc4b7..efd17e61da0 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -72,7 +72,30 @@ for(var/obj/I in contents) if(!I.is_frozen) //let it go I.make_frozen_visual(I) + for(var/mob/living/L in contents) + if(L.bodytemperature >= 10) + L.bodytemperature -= 10 + if(L.bodytemperature <= 50) + L.apply_status_effect(/datum/status_effect/freon) MakeSlippery(TURF_WET_PERMAFROST, 5) + return 1 + +/turf/open/water_vapor_gas_act() + MakeSlippery(min_wet_time = 10, wet_time_to_add = 5) + + for(var/mob/living/simple_animal/slime/M in src) + M.apply_water() + + clean_blood() + for(var/obj/effect/O in src) + if(is_cleanable(O)) + qdel(O) + + var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in src) + if(hotspot && !istype(src, /turf/open/space)) + air.temperature = max(min(air.temperature-2000,air.temperature/2),0) + qdel(hotspot) + return 1 /turf/open/handle_fall(mob/faller, forced) faller.lying = pick(90, 270) @@ -119,8 +142,10 @@ step(C, olddir) C.spin(1,1) else if(lube&SLIDE_ICE) + C.slipping = TRUE spawn(1) step(C, olddir) + C.slipping = FALSE return 1 /turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost, 5 = Slide diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index c7ed7f4fb33..2d72f8cc43a 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -181,13 +181,16 @@ var/list/gaslist_cache = null //world << "post [temperature], [cached_gases["plasma"][MOLES]], [cached_gases["co2"][MOLES]] */ if(holder) - if(cached_gases["freon"] && cached_gases["o2"]) - if(cached_gases["freon"][MOLES] >= 3) - if(return_temperature() < 50) - holder.freon_gas_act() - cached_gases["freon"][MOLES] -= 3 - cached_gases["o2"][MOLES] += 3 - temperature += 1 + if(cached_gases["freon"]) + if(cached_gases["freon"][MOLES] >= MOLES_PLASMA_VISIBLE) + if(holder.freon_gas_act()) + cached_gases["freon"][MOLES] -= MOLES_PLASMA_VISIBLE + + if(cached_gases["water_vapor"]) + if(cached_gases["water_vapor"][MOLES] >= MOLES_PLASMA_VISIBLE) + if(holder.water_vapor_gas_act()) + cached_gases["water_vapor"][MOLES] -= MOLES_PLASMA_VISIBLE + fuel_burnt = 0 if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) //world << "pre [temperature], [cached_gases["o2"][MOLES]], [cached_gases["plasma"][MOLES]]" diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index 650b331d681..e13256a2160 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -51,12 +51,19 @@ var/list/hardcoded_gases = list("o2","n2","co2","plasma") //the main four gases, gas_overlay = "plasma" moles_visible = MOLES_PLASMA_VISIBLE +/datum/gas/water_vapor + id = "water_vapor" + specific_heat = 40 + name = "Water Vapor" + gas_overlay = "water_vapor" + moles_visible = MOLES_PLASMA_VISIBLE + /datum/gas/freon id = "freon" - specific_heat = 1000 + specific_heat = 2000 name = "Freon" gas_overlay = "freon" - moles_visible = 3 + moles_visible = MOLES_PLASMA_VISIBLE /datum/gas/nitrous_oxide id = "n2o" diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 912cad976c7..0d0212114ca 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -78,6 +78,7 @@ "n2o" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa "bz" = new/datum/tlv(-1, -1, 0.2, 0.5), "freon" = new/datum/tlv(-1, -1, 0.2, 0.5), + "water_vapor" = new/datum/tlv(-1, -1, 0.2, 0.5), ) /obj/machinery/airalarm/server // No checks here. @@ -91,6 +92,7 @@ "n2o" = new/datum/tlv(-1, -1, -1, -1), "bz" = new/datum/tlv(-1, -1, -1, -1), "freon" = new/datum/tlv(-1, -1, -1, -1), + "water_vapor" = new/datum/tlv(-1, -1, -1, -1) ) /obj/machinery/airalarm/kitchen_cold_room // Copypasta: to check temperatures. @@ -104,6 +106,7 @@ "n2o" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa "bz" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa "freon" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa + "water_vapor" = new/datum/tlv(-1, -1, 0.2, 0.5) ) //all air alarms in area are connected via magic @@ -237,7 +240,8 @@ "filter_toxins" = info["filter_toxins"], "filter_n2o" = info["filter_n2o"], "filter_bz" = info["filter_bz"], - "filter_freon" = info["filter_freon"] + "filter_freon" = info["filter_freon"], + "filter_water_vapor" = info["filter_water_vapor"] )) data["mode"] = mode data["modes"] = list() @@ -293,7 +297,7 @@ if(usr.has_unlimited_silicon_privilege && !wires.is_cut(WIRE_IDSCAN)) locked = !locked . = TRUE - if("power", "co2_scrub", "tox_scrub", "n2o_scrub", "bz_scrub", "freon_scrub", "widenet", "scrubbing") + if("power", "co2_scrub", "tox_scrub", "n2o_scrub", "bz_scrub", "freon_scrub","water_vapor_scrub", "widenet", "scrubbing") send_signal(device_id, list("[action]" = text2num(params["val"]))) . = TRUE if("excheck") @@ -412,6 +416,7 @@ "n2o_scrub" = 0, "bz_scrub" = 1, "freon_scrub"= 1, + "water_vapor_scrub"= 1, "scrubbing" = 1, "widenet" = 0, )) @@ -430,6 +435,7 @@ "n2o_scrub" = 1, "bz_scrub" = 1, "freon_scrub"= 1, + "water_vapor_scrub"= 1, "scrubbing" = 1, "widenet" = 1, )) @@ -461,6 +467,7 @@ "n2o_scrub" = 0, "bz_scrub" = 0, "freon_scrub"= 1, + "water_vapor_scrub"= 1, "scrubbing" = 1, "widenet" = 0, )) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 181cce17d29..d34f7231d7b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -21,6 +21,8 @@ var/scrub_N2O = 0 var/scrub_BZ = 0 var/scrub_Freon = 1 + var/scrub_WaterVapor = 1 + var/volume_rate = 200 var/widenet = 0 //is this scrubber acting on the 3x3 area around it. @@ -72,6 +74,8 @@ amount += idle_power_usage if(scrub_Freon) amount += idle_power_usage + if(scrub_WaterVapor) + amount += idle_power_usage else //scrubbing == SIPHONING amount = active_power_usage @@ -123,6 +127,7 @@ "filter_n2o" = scrub_N2O, "filter_bz" = scrub_BZ, "filter_Freon" = scrub_Freon, + "filter_WaterVapor" = scrub_WaterVapor, "sigtype" = "status" ) @@ -218,6 +223,11 @@ filtered_out.gases["freon"][MOLES] = removed_gases["freon"][MOLES] removed.gases["freon"][MOLES] = 0 + if(scrub_Freon && removed_gases["water_vapor"]) + filtered_out.assert_gas("water_vapor") + filtered_out.gases["water_vapor"][MOLES] = removed_gases["water_vapor"][MOLES] + removed.gases["water_vapor"][MOLES] = 0 + removed.garbage_collect() //Remix the resulting gases @@ -303,6 +313,11 @@ if("toggle_freon_scrub" in signal.data) scrub_Freon = !scrub_Freon + if("water_vapor_scrub" in signal.data) + scrub_WaterVapor = text2num(signal.data["water_vapor_scrub"]) + if("toggle_water_vapor_scrub" in signal.data) + scrub_WaterVapor = !scrub_WaterVapor + if("init" in signal.data) name = signal.data["init"] return diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 6cdb1ce2b12..f679764fefa 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -85,7 +85,14 @@ desc = "Freon. Great for the atmosphere!" icon_state = "freon" gas_type = "freon" - starter_temp = 2.7 + starter_temp = 120 + +/obj/machinery/portable_atmospherics/canister/water_vapor + name = "water vapor canister" + desc = "Water Vapor. We get it, you vape." + icon_state = "water_vapor" + gas_type = "water_vapor" + filled = 1 /obj/machinery/portable_atmospherics/canister/New(loc, datum/gas_mixture/existing_mixture) ..() diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 04cda991256..308daa43f2a 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -7,7 +7,7 @@ var/volume_rate = 1000 volume = 1000 - var/list/scrubbing = list("plasma", "co2", "n2o", "agent_b", "bz", "freon") + var/list/scrubbing = list("plasma", "co2", "n2o", "agent_b", "bz", "freon", "water_vapor") /obj/machinery/portable_atmospherics/scrubber/Destroy() var/turf/T = get_turf(src) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index b4ee5a8844d..9f0c803600f 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1416,7 +1416,6 @@ if(-INFINITY to 120) H.throw_alert("temp", /obj/screen/alert/cold, 3) H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod, BURN) - H.apply_status_effect(/datum/status_effect/freon) else H.clear_alert("temp") diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2ac3753795c..31136f8ab02 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -666,8 +666,8 @@ if (AM.density && AM.anchored) pressure_resistance_prob_delta -= 20 break - - ..(pressure_difference, direction, pressure_resistance_prob_delta) + if(!slipping) + ..(pressure_difference, direction, pressure_resistance_prob_delta) /mob/living/verb/resist() set name = "Resist" diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 83103ebf337..d33be72052d 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -71,3 +71,5 @@ var/blood_volume = 0 //how much blood the mob has var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override + + var/slipping = FALSE \ No newline at end of file diff --git a/icons/effects/tile_effects.dmi b/icons/effects/tile_effects.dmi index 2a627378203..3e86da783d3 100644 Binary files a/icons/effects/tile_effects.dmi and b/icons/effects/tile_effects.dmi differ diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index c70d01ab2e1..d2bb36cc0bf 100644 Binary files a/icons/obj/atmos.dmi and b/icons/obj/atmos.dmi differ