Skip to content

Commit

Permalink
Better nanofrost
Browse files Browse the repository at this point in the history
  • Loading branch information
FunnyMan3595 committed Dec 29, 2024
1 parent abe9d61 commit 1ec6a16
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 43 deletions.
102 changes: 60 additions & 42 deletions code/game/objects/effects/effect_system/effects_smoke.dm
Original file line number Diff line number Diff line change
Expand Up @@ -175,53 +175,71 @@
name = "nanofrost smoke"
color = "#B2FFFF"
opacity = FALSE
var/spread_range = 6
lifetime = 0.5 SECONDS_TO_LIFE_CYCLES

/datum/effect_system/smoke_spread/freezing
effect_type = /obj/effect/particle_effect/smoke/freezing
var/blast = FALSE

/datum/effect_system/smoke_spread/freezing/proc/Chilled(atom/A)
if(issimulatedturf(A))
var/turf/simulated/T = A
if(!T.blocks_air)
var/datum/milla_safe/smoke_spread_chill/milla = new()
milla.invoke_async(src, T)
for(var/obj/machinery/atmospherics/unary/vent_pump/V in T)
if(!isnull(V.welded) && !V.welded) //must be an unwelded vent pump.
V.welded = TRUE
V.update_icon()
V.visible_message("<span class='danger'>[V] was frozen shut!</span>")
for(var/obj/machinery/atmospherics/unary/vent_scrubber/U in T)
if(!isnull(U.welded) && !U.welded) //must be an unwelded vent scrubber.
U.welded = TRUE
U.update_icon()
U.visible_message("<span class='danger'>[U] was frozen shut!</span>")
for(var/mob/living/L in T)
L.ExtinguishMob()
for(var/obj/item/Item in T)
Item.extinguish()

/datum/milla_safe/smoke_spread_chill

/datum/milla_safe/smoke_spread_chill/on_run(datum/effect_system/smoke_spread/smoke, turf/T)

/obj/effect/particle_effect/smoke/freezing/process()
. = ..()
var/turf/T = get_turf(src)
if(!istype(T))
return

for(var/obj/machinery/atmospherics/unary/vent_pump/V in T)
if(!isnull(V.welded) && !V.welded) //must be an unwelded vent pump.
V.welded = TRUE
V.update_icon()
V.visible_message("<span class='danger'>[V] was frozen shut!</span>")
for(var/obj/machinery/atmospherics/unary/vent_scrubber/U in T)
if(!isnull(U.welded) && !U.welded) //must be an unwelded vent scrubber.
U.welded = TRUE
U.update_icon()
U.visible_message("<span class='danger'>[U] was frozen shut!</span>")
for(var/mob/living/L in T)
L.ExtinguishMob()
for(var/obj/item/Item in T)
Item.extinguish()

var/datum/milla_safe/nanofrost_extinguish/milla = new()
milla.invoke_async(src, T)

/datum/milla_safe/nanofrost_extinguish/on_run(obj/effect/particle_effect/smoke/freezing/smoke, turf/T)
if(!istype(T))
return
var/datum/gas_mixture/env = get_turf_air(T)
if(get_dist(T, smoke) < 2) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air
env.set_temperature(2)
for(var/obj/effect/hotspot/H in T)
for(var/obj/effect/hotspot/fake/H in T)
qdel(H)
if(env.toxins())
env.set_nitrogen(env.nitrogen() + env.toxins())
env.set_toxins(0)

/datum/effect_system/smoke_spread/freezing/set_up(amount = 5, only_cardinals = FALSE, source, desired_direction, datum/reagents/chemicals, blasting = FALSE)
..()
blast = blasting

/datum/effect_system/smoke_spread/freezing/start()
if(blast)
for(var/turf/T in RANGE_TURFS(2, location))
Chilled(T)
..()

if(env.fuel_burnt() == 0)
return

env.set_temperature(2)
env.set_nitrogen(env.nitrogen() + env.toxins())
env.set_toxins(0)

if(smoke.spread_range <= 0 || smoke.lifetime > 0)
return

// Spread the smoke, up to spread_range.
for(var/direction in list(NORTH, SOUTH, EAST, WEST))
var/turf/neighbor = get_step(T, direction)
if(isnull(neighbor))
continue
if(neighbor.density)
continue
var/has_nanofrost = FALSE
for(var/datum/effect_system/smoke_spread/freezing in neighbor)
has_nanofrost = TRUE
break
if(has_nanofrost)
continue
if(prob(50))
continue

var/obj/effect/particle_effect/smoke/freezing/new_smoke = new(neighbor)
new_smoke.spread_range = smoke.spread_range - 1

/////////////////////////////////////////////
// Sleep smoke
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/weapons/tanks/watertank.dm
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@

/obj/effect/nanofrost_container/proc/Smoke()
var/datum/effect_system/smoke_spread/freezing/S = new
S.set_up(amount = 6, only_cardinals = FALSE, source = loc, desired_direction = null, chemicals = null, blasting = TRUE)
S.set_up(amount = 6, only_cardinals = FALSE, source = loc)
S.start()
new /obj/effect/decal/cleanable/flour/nanofrost(get_turf(src))
playsound(src, 'sound/effects/bamf.ogg', 100, TRUE)
Expand Down

0 comments on commit 1ec6a16

Please sign in to comment.