diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm
index 75aeaa447c3..daf288f74ce 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -156,43 +156,51 @@
/datum/effect_system/smoke_spread/freezing
effect_type = /obj/effect/particle_effect/smoke/freezing
var/blast = 0
+ var/temperature = 2
+ var/weldvents = TRUE
+ var/distcheck = TRUE
/datum/effect_system/smoke_spread/freezing/proc/Chilled(atom/A)
if(isopenturf(A))
var/turf/open/T = A
if(T.air)
var/datum/gas_mixture/G = T.air
- if(get_dist(T, location) < 2) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air
- G.temperature = 2
+ if(!distcheck || get_dist(T, location) < blast) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air
+ G.temperature = temperature
T.air_update_turf()
for(var/obj/effect/hotspot/H in T)
qdel(H)
- var/list/G_gases = G.gases
- if(G_gases[/datum/gas/plasma])
- G.assert_gas(/datum/gas/nitrogen)
- G_gases[/datum/gas/nitrogen][MOLES] += (G_gases[/datum/gas/plasma][MOLES])
- G_gases[/datum/gas/plasma][MOLES] = 0
- G.garbage_collect()
- for(var/obj/machinery/atmospherics/components/unary/U in T)
- if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber.
- U.welded = TRUE
- U.update_icon()
- U.visible_message("[U] was frozen shut!")
+ var/list/G_gases = G.gases
+ if(G_gases[/datum/gas/plasma])
+ G.assert_gas(/datum/gas/nitrogen)
+ G_gases[/datum/gas/nitrogen][MOLES] += (G_gases[/datum/gas/plasma][MOLES])
+ G_gases[/datum/gas/plasma][MOLES] = 0
+ G.garbage_collect()
+ if (weldvents)
+ for(var/obj/machinery/atmospherics/components/unary/U in T)
+ if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber.
+ U.welded = TRUE
+ U.update_icon()
+ U.visible_message("[U] was frozen shut!")
for(var/mob/living/L in T)
L.ExtinguishMob()
for(var/obj/item/Item in T)
Item.extinguish()
-/datum/effect_system/smoke_spread/freezing/set_up(radius = 5, loca, blasting = 0)
+/datum/effect_system/smoke_spread/freezing/set_up(radius = 5, loca, blast_radius = 0)
..()
- blast = blasting
+ blast = blast_radius
/datum/effect_system/smoke_spread/freezing/start()
if(blast)
- for(var/turf/T in RANGE_TURFS(2, location))
+ for(var/turf/T in RANGE_TURFS(blast, location))
Chilled(T)
..()
+/datum/effect_system/smoke_spread/freezing/decon
+ temperature = 293.15
+ distcheck = FALSE
+ weldvents = FALSE
/////////////////////////////////////////////
diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm
index 84846c236a8..160304b1c33 100644
--- a/code/modules/events/vent_clog.dm
+++ b/code/modules/events/vent_clog.dm
@@ -79,6 +79,11 @@
typepath = /datum/round_event/vent_clog/beer
max_occurrences = 0
+/datum/round_event_control/vent_clog/plasma_decon
+ name = "Plasma decontamination"
+ typepath = /datum/round_event/vent_clog/plasma_decon
+ max_occurrences = 0
+
/datum/round_event/vent_clog/beer
reagentsAmount = 100
@@ -96,3 +101,14 @@
foam.set_up(200, get_turf(vent), R)
foam.start()
CHECK_TICK
+
+/datum/round_event/vent_clog/plasma_decon/announce()
+ priority_announce("We are deploying an experimental plasma decontamination system. Please stand away from the vents and do not breathe the smoke that comes out.", "Central Command Update")
+
+/datum/round_event/vent_clog/plasma_decon/start()
+ for(var/obj/machinery/atmospherics/components/unary/vent in vents)
+ if(vent && vent.loc)
+ var/datum/effect_system/smoke_spread/freezing/decon/smoke = new
+ smoke.set_up(7, get_turf(vent), 7)
+ smoke.start()
+ CHECK_TICK