diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 1ce95c99325..08cdf7ce843 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -285,6 +285,9 @@ var/list/bloody_footprints_cache = list() #define TURF_WET_ICE 3 #define TURF_WET_PERMAFROST 4 +//Maximum amount of time, (in approx. seconds.) a tile can be wet for. +#define MAXIMUM_WET_TIME 300 + //Object/Item sharpness #define IS_BLUNT 0 #define IS_SHARP 1 diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index a81762cadf1..4fc6681f860 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -174,7 +174,7 @@ var/turf/T = get_turf(loc) if(istype(T, /turf/open)) var/turf/open/theturf = T - theturf.MakeSlippery(TURF_WET_WATER) + theturf.MakeSlippery(min = 4, max = 2) user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "You quietly empty out \the [src] using its release valve.") return diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 39d63affdfe..91c0daa03c7 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -182,7 +182,7 @@ else if(istype(loc, /turf/open)) var/turf/open/tile = loc - tile.MakeSlippery() + tile.MakeSlippery(min = 10, max = 5) /obj/machinery/shower/attackby(obj/item/I, mob/user, params) diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 068f0b945a6..887320b8501 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -2,6 +2,7 @@ var/slowdown = 0 //negative for faster, positive for slower var/wet = 0 + var/wet_time = 0 // Time in seconds that this floor will be wet for. var/image/wet_overlay = null /turf/open/Initalize_Atmos(times_fired) @@ -86,7 +87,10 @@ C.spin(1,1) return 1 -/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice +/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min = 0, max = 0) // 1 = Water, 2 = Lube, 3 = Ice + wet_time += max + if(wet_time < min) + wet_time = min if(wet >= wet_setting) return wet = wet_setting @@ -103,32 +107,49 @@ else wet_overlay = image('icons/effects/water.dmi', src, "wet_static") overlays += wet_overlay - - if(wet < TURF_WET_ICE) - addtimer(src, "MakeDry", rand(790, 820)) + addtimer(src, "HandleWet", 30, 1) /turf/open/proc/MakeDry(wet_setting = TURF_WET_WATER) - if(!istype(src, /turf)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all. - return if(wet > wet_setting || !wet) return if(wet == TURF_WET_PERMAFROST) wet = TURF_WET_ICE else - wet = TURF_DRY - if(wet_overlay) - overlays -= wet_overlay + spawn(rand(0,20)) + wet = TURF_DRY + if(wet_overlay) + overlays -= wet_overlay /turf/open/proc/HandleWet() - if(!istype(src, /turf)) - return - if(!wet || wet > TURF_WET_ICE) - return - if(air.temperature < T0C && wet != TURF_WET_ICE) + if(!wet_time && wet < TURF_WET_ICE) MakeDry(TURF_WET_ICE) - MakeSlippery(TURF_WET_ICE) - else if (wet == TURF_WET_ICE) + if(wet_time > MAXIMUM_WET_TIME) + wet_time = MAXIMUM_WET_TIME + if(wet == TURF_WET_ICE && air.temperature > T0C) MakeDry(TURF_WET_ICE) MakeSlippery(TURF_WET_WATER) - else if (air.temperature > T0C + 40) // Warm rooms will dry up rather quickly. - addtimer(src, "MakeDry", 100, 1, TURF_WET_ICE) + switch(air.temperature) + if(-INFINITY to T0C) + if(wet != TURF_WET_ICE && wet) + MakeDry(TURF_WET_ICE) + MakeSlippery(TURF_WET_ICE) + if(T0C to T20C) + wet_time = max(0, wet_time-1) + if(T20C to T0C + 40) + wet_time = max(0, wet_time-2) + if(T0C + 40 to T0C + 60) + wet_time = max(0, wet_time-3) + if(T0C + 60 to T0C + 80) + wet_time = max(0, wet_time-5) + if(T0C + 80 to T0C + 100) + wet_time = max(0, wet_time-10) + if(T0C + 100 to INFINITY) + wet_time = 0 + + if(wet && wet < TURF_WET_ICE && !wet_time) + MakeDry(TURF_WET_ICE) + if(!wet && wet_time) + wet_time = 0 + if(wet) + addtimer(src, "HandleWet", 30, 1) + diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 05fdf032d0b..893df8ead12 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -117,8 +117,6 @@ perform_exposure() - if(location.wet) location.wet = 0 - if(bypassing) icon_state = "3" location.burn_tile() diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index cbc9232520c..a0e9c90e029 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -192,7 +192,6 @@ if(air.temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION) if(consider_superconductivity(starting = 1)) remove = 0 - HandleWet() // if the tile is wet, and cold, make ice. Or if it's wet, and warm, dry it off. if(!our_excited_group && remove == 1) SSair.remove_from_active(src) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index fb0339fa62d..87577e822d0 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -62,6 +62,7 @@ var/turf/open/t_loc = get_turf(src) if(istype(t_loc) && t_loc.wet) t_loc.MakeDry(TURF_WET_WATER) + t_loc.wet_time = 0 /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index f7efbc7c198..92ee9fe9313 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -104,8 +104,8 @@ victim.acid_act(5, 2, 100) if(prob(10)) //Wets floors randomly - var/turf/open/T = loc - T.MakeSlippery() + var/turf/open/OT = get_turf(loc) + OT.MakeSlippery(min = 15, max = 5) if(prob(5)) //Spawns foam! visible_message("[src] whirs and bubbles violently, before releasing a plume of froth!") diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index 6f516dfa48a..420f4068911 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -565,7 +565,7 @@ reac_volume = ..() var/turf/open/T = get_turf(M) if(istype(T) && prob(reac_volume)) - T.MakeSlippery(TURF_WET_WATER) + T.MakeSlippery(min = 15, max = 1) M.adjust_fire_stacks(-(reac_volume / 10)) M.ExtinguishMob() M.apply_damage(0.1*reac_volume, BRUTE) @@ -586,7 +586,7 @@ /datum/reagent/blob/pressurized_slime/proc/extinguisharea(obj/effect/blob/B, probchance) for(var/turf/open/T in range(1, B)) if(prob(probchance)) - T.MakeSlippery(TURF_WET_WATER) + T.MakeSlippery(min = 15, max = 1) for(var/obj/O in T) O.extinguish() for(var/mob/living/L in T) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index bca21857b2d..66e33ff9324 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -155,7 +155,7 @@ if(reac_volume >= 1) // Make Freezy Foam and anti-fire grenades! if(istype(T, /turf/open)) var/turf/open/OT = T - OT.MakeSlippery(TURF_WET_WATER) // Is less effective in high pressure/high heat capacity environments. More effective in low pressure. + OT.MakeSlippery(TURF_WET_ICE, 15, reac_volume) // Is less effective in high pressure/high heat capacity environments. More effective in low pressure. OT.air.temperature -= MOLES_CELLSTANDARD*100*reac_volume/OT.air.heat_capacity() // reduces environment temperature by 5K per unit. /datum/reagent/consumable/condensedcapsaicin @@ -318,8 +318,7 @@ /datum/reagent/consumable/cornoil/reaction_turf(turf/open/T, reac_volume) if (!istype(T)) return - if(reac_volume >= 3) - T.MakeSlippery() + T.MakeSlippery(min = 20, max = reac_volume*2) var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T) if(hotspot) var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index d99e80126fa..a832b919c72 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -121,8 +121,9 @@ /datum/reagent/water/reaction_turf(turf/open/T, reac_volume) if (!istype(T)) return var/CT = cooling_temperature - if(reac_volume >= 10) - T.MakeSlippery() + + if(reac_volume >= 5) + T.MakeSlippery(min = 10, max = reac_volume) for(var/mob/living/simple_animal/slime/M in T) M.apply_water() @@ -254,7 +255,7 @@ /datum/reagent/lube/reaction_turf(turf/open/T, reac_volume) if (!istype(T)) return if(reac_volume >= 1) - T.MakeSlippery(TURF_WET_LUBE) + T.MakeSlippery(TURF_WET_LUBE, 10, reac_volume) /datum/reagent/spraytan name = "Spray Tan" @@ -1123,7 +1124,8 @@ /datum/reagent/drying_agent/reaction_turf(turf/open/T, reac_volume) if(istype(T) && T.wet) - T.MakeDry(TURF_WET_WATER) + T.wet_time = max(0, T.wet_time-reac_volume*5) // removes 5 seconds of wetness for every unit. + T.HandleWet() /datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume) if(O.type == /obj/item/clothing/shoes/galoshes)