mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-16 05:02:42 +00:00
Merge pull request #6846 from mwerezak/fire-extinguishers
Water cools hot turfs even if they do not have a hotspot.
This commit is contained in:
@@ -173,11 +173,14 @@
|
||||
energy_drain = 0
|
||||
range = MELEE|RANGED
|
||||
required_type = /obj/mecha/working
|
||||
var/spray_particles = 5
|
||||
var/spray_amount = 5 //units of liquid per particle. 5 is enough to wet the floor - it's a big fire extinguisher, so should be fine
|
||||
var/max_water = 1000
|
||||
|
||||
New()
|
||||
reagents = new/datum/reagents(200)
|
||||
reagents = new/datum/reagents(max_water)
|
||||
reagents.my_atom = src
|
||||
reagents.add_reagent("water", 200)
|
||||
reagents.add_reagent("water", max_water)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -188,8 +191,8 @@
|
||||
if(do_after_cooldown(target))
|
||||
if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1)
|
||||
var/obj/o = target
|
||||
o.reagents.trans_to(src, 200)
|
||||
occupant_message("\blue Extinguisher refilled")
|
||||
var/amount = o.reagents.trans_to(src, 200)
|
||||
occupant_message("\blue [amount] units transferred into internal tank.")
|
||||
playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
else
|
||||
if(src.reagents.total_volume > 0)
|
||||
@@ -200,16 +203,17 @@
|
||||
var/turf/T2 = get_step(T,turn(direction, -90))
|
||||
|
||||
var/list/the_targets = list(T,T1,T2)
|
||||
for(var/a=0, a<spray_particles, a++)
|
||||
spawn(0)
|
||||
for(var/a=0, a<5, a++)
|
||||
var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(chassis))
|
||||
if(!W)
|
||||
return
|
||||
var/turf/my_target = pick(the_targets)
|
||||
var/datum/reagents/R = new/datum/reagents(5)
|
||||
var/datum/reagents/R = new/datum/reagents(spray_amount)
|
||||
W.reagents = R
|
||||
R.my_atom = W
|
||||
src.reagents.trans_to(W,1)
|
||||
src.reagents.trans_to(W, spray_amount)
|
||||
|
||||
for(var/b=0, b<4, b++)
|
||||
if(!W)
|
||||
return
|
||||
@@ -223,6 +227,7 @@
|
||||
if(W.loc == my_target)
|
||||
break
|
||||
sleep(2)
|
||||
W.delete()
|
||||
return 1
|
||||
|
||||
get_equip_info()
|
||||
|
||||
@@ -13,7 +13,10 @@
|
||||
force = 10.0
|
||||
matter = list("metal" = 90)
|
||||
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
|
||||
var/max_water = 50
|
||||
|
||||
var/spray_particles = 6
|
||||
var/spray_amount = 2 //units of liquid per particle
|
||||
var/max_water = 120
|
||||
var/last_use = 1.0
|
||||
var/safety = 1
|
||||
var/sprite_name = "fire_extinguisher"
|
||||
@@ -28,7 +31,9 @@
|
||||
throwforce = 2
|
||||
w_class = 2.0
|
||||
force = 3.0
|
||||
max_water = 30
|
||||
max_water = 60
|
||||
spray_particles = 6
|
||||
spray_amount = 2
|
||||
sprite_name = "miniFE"
|
||||
|
||||
/obj/item/weapon/extinguisher/New()
|
||||
@@ -56,8 +61,8 @@
|
||||
|
||||
if( istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(src,target) <= 1)
|
||||
var/obj/o = target
|
||||
o.reagents.trans_to(src, 50)
|
||||
user << "\blue \The [src] is now refilled"
|
||||
var/amount = o.reagents.trans_to(src, 50)
|
||||
user << "\blue You fill [src] with [amount] units of the contents of [target]."
|
||||
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
return
|
||||
|
||||
@@ -111,16 +116,17 @@
|
||||
|
||||
var/list/the_targets = list(T,T1,T2)
|
||||
|
||||
for(var/a=0, a<5, a++)
|
||||
for(var/a=0, a < spray_particles, a++)
|
||||
spawn(0)
|
||||
var/obj/effect/effect/water/W = new /obj/effect/effect/water( get_turf(src) )
|
||||
var/turf/my_target = pick(the_targets)
|
||||
var/datum/reagents/R = new/datum/reagents(5)
|
||||
var/datum/reagents/R = new/datum/reagents(spray_amount)
|
||||
if(!W) return
|
||||
W.reagents = R
|
||||
R.my_atom = W
|
||||
if(!W || !src) return
|
||||
src.reagents.trans_to(W,1)
|
||||
src.reagents.trans_to(W, spray_amount)
|
||||
|
||||
for(var/b=0, b<5, b++)
|
||||
step_towards(W,my_target)
|
||||
if(!W) return
|
||||
|
||||
@@ -184,7 +184,7 @@ datum
|
||||
M.resistances += self.data
|
||||
return
|
||||
|
||||
|
||||
#define WATER_LATENT_HEAT 19000 // How much heat is removed when applied to a hot turf, in J/unit (19000 makes 120 u of water roughly equivalent to 4L)
|
||||
water
|
||||
name = "Water"
|
||||
id = "water"
|
||||
@@ -195,7 +195,18 @@ datum
|
||||
|
||||
reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if (!istype(T)) return
|
||||
src = null
|
||||
|
||||
//If the turf is hot enough, remove some heat
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/min_temperature = T0C + 100 //100C, the boiling point of water
|
||||
|
||||
if (environment && environment.temperature > min_temperature) //abstracted as steam or something
|
||||
var/removed_heat = between(0, volume*WATER_LATENT_HEAT, -environment.get_thermal_energy_change(min_temperature))
|
||||
environment.add_thermal_energy(-removed_heat)
|
||||
if (prob(5))
|
||||
T.visible_message("\red The water sizzles as it lands on \the [T]!")
|
||||
|
||||
else //otherwise, the turf gets wet
|
||||
if(volume >= 3)
|
||||
if(T.wet >= 1) return
|
||||
T.wet = 1
|
||||
@@ -205,6 +216,7 @@ datum
|
||||
T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
|
||||
T.overlays += T.wet_overlay
|
||||
|
||||
src = null
|
||||
spawn(800)
|
||||
if (!istype(T)) return
|
||||
if(T.wet >= 2) return
|
||||
@@ -213,19 +225,14 @@ datum
|
||||
T.overlays -= T.wet_overlay
|
||||
T.wet_overlay = null
|
||||
|
||||
for(var/mob/living/carbon/slime/M in T)
|
||||
M.apply_water()
|
||||
|
||||
//Put out fires.
|
||||
var/hotspot = (locate(/obj/fire) in T)
|
||||
if(hotspot && !istype(T, /turf/space))
|
||||
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles )
|
||||
lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
|
||||
lowertemp.react()
|
||||
T.assume_air(lowertemp)
|
||||
if(hotspot)
|
||||
del(hotspot)
|
||||
return
|
||||
if(environment)
|
||||
environment.react() //react at the new temperature
|
||||
|
||||
reaction_obj(var/obj/O, var/volume)
|
||||
src = null
|
||||
var/turf/T = get_turf(O)
|
||||
var/hotspot = (locate(/obj/fire) in T)
|
||||
if(hotspot && !istype(T, /turf/space))
|
||||
@@ -238,7 +245,11 @@ datum
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
|
||||
if(!cube.wrapped)
|
||||
cube.Expand()
|
||||
return
|
||||
|
||||
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
|
||||
if (istype(M, /mob/living/carbon/slime))
|
||||
var/mob/living/carbon/slime/S = M
|
||||
S.apply_water()
|
||||
|
||||
water/holywater
|
||||
name = "Holy Water"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user