diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index dcbe4e4462e..b34f3412a5d 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -282,3 +282,5 @@
/atom/movable/proc/canSingulothPull(var/obj/machinery/singularity/singulo)
return 1
+/atom/movable/proc/water_act(var/volume, var/temperature, var/source) //amount of water acting : temperature of water in kelvin : object that called it (for shennagins)
+ return 1
\ No newline at end of file
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 2fdd133801b..2081f911325 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -146,8 +146,10 @@
if (M.loc == loc)
wash(M)
check_heat(M)
+ M.water_act(100, convertHeat(), src)
for (var/atom/movable/G in src.loc)
G.clean_blood()
+ G.water_act(100, convertHeat(), src)
/obj/machinery/shower/attackby(obj/item/I as obj, mob/user as mob, params)
if(I.type == /obj/item/device/analyzer)
@@ -163,6 +165,8 @@
if("boiling")
watertemp = "normal"
user.visible_message("[user] adjusts the shower with the [I].", "You adjust the shower with the [I].")
+ if(on)
+ I.water_act(100, convertHeat(), src)
/obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up
overlays.Cut() //once it's been on for a while, in addition to handling the water overlay.
@@ -201,10 +205,21 @@
mobpresent -= 1
..()
+/obj/machinery/shower/proc/convertHeat()
+ switch(watertemp)
+ if("boiling")
+ return 340.15
+ if("normal")
+ return 310.15
+ if("freezing")
+ return 230.15
+
//Yes, showers are super powerful as far as washing goes.
/obj/machinery/shower/proc/wash(atom/movable/O as obj|mob)
if(!on) return
+ O.water_act(100, convertHeat(), src)
+
if(isliving(O))
var/mob/living/L = O
L.ExtinguishMob()
@@ -298,17 +313,16 @@
var/mob/living/carbon/C = M
if(watertemp == "freezing")
- C.bodytemperature = max(80, C.bodytemperature - 80)
+ //C.bodytemperature = max(80, C.bodytemperature - 80)
C << "The water is freezing!"
return
if(watertemp == "boiling")
- C.bodytemperature = min(500, C.bodytemperature + 35)
+ //C.bodytemperature = min(500, C.bodytemperature + 35)
C.adjustFireLoss(5)
C << "The water is searing!"
return
-
/obj/item/weapon/bikehorn/rubberducky
name = "rubber ducky"
desc = "Rubber ducky you're so fine, you make bathtime lots of fuuun. Rubber ducky I'm awfully fooooond of yooooouuuu~" //thanks doohl
@@ -372,7 +386,9 @@
user.visible_message("\blue [user] fills the [RG] using \the [src].","\blue You fill the [RG] using \the [src].")
return
- else if (istype(O, /obj/item/weapon/melee/baton))
+ O.water_act(20,310.15,src)
+
+ if (istype(O, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = O
if (B.bcell.charge > 0 && B.status == 1)
flick("baton_active", src)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 683228e97e8..5da86e83455 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -92,7 +92,6 @@ mob/living
return
return
-
/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null)
if(status_flags & GODMODE) //godmode
return 0
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 3ff64431933..d8d12108b20 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -488,3 +488,8 @@ emp_act
..()
return
+
+/mob/living/carbon/human/water_act(volume, temperature)
+ ..()
+ if(temperature >= 330) bodytemperature = bodytemperature + (temperature - bodytemperature)
+ if(temperature <= 280) bodytemperature = bodytemperature - (bodytemperature - temperature)
\ No newline at end of file
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index b61d58223c6..aff6a6d415e 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -238,6 +238,10 @@
//Mobs on Fire end
+/mob/living/water_act(volume, temperature)
+ if(volume >= 20) fire_stacks -= 0.5
+ if(volume >= 50) fire_stacks -= 1
+
//This is called when the mob is thrown into a dense turf
/mob/living/proc/turf_collision(var/turf/T, var/speed)
src.take_organ_damage(speed*5)
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 8cc0229c548..6d332a5cbc1 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -1722,6 +1722,9 @@
M.gib()
..()
+ water_act(volume, temperature)
+ if(volume >= 5) return Expand()
+
proc/Expand()
for(var/mob/M in viewers(src,7))
M << "\red \The [src] expands!"