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:
Chinsky
2014-11-05 09:03:35 +03:00
4 changed files with 472 additions and 441 deletions

View File

@@ -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()

View File

@@ -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

View File

@@ -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