diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 0a32c78829d..a5f051e6564 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -980,19 +980,21 @@
var/ants_remaining = 0
/datum/status_effect/ants/on_creation(mob/living/new_owner, amount_left)
- if(isnum(amount_left))
- to_chat(new_owner, "You're covered in ants!")
+ if(isnum(amount_left) && new_owner.stat < HARD_CRIT)
+ if(new_owner.stat < UNCONSCIOUS) // Unconcious people won't get messages
+ to_chat(new_owner, "You're covered in ants!")
ants_remaining += amount_left
RegisterSignal(new_owner, COMSIG_COMPONENT_CLEAN_ACT, .proc/ants_washed)
. = ..()
/datum/status_effect/ants/refresh(effect, amount_left)
var/mob/living/carbon/human/victim = owner
- if(isnum(amount_left) && ants_remaining >= 1)
- if(!prob(1)) // 99%
- to_chat(victim, "You're covered in MORE ants!")
- else // 1%
- victim.say("AAHH! THIS SITUATION HAS ONLY BEEN MADE WORSE WITH THE ADDITION OF YET MORE ANTS!!", forced = /datum/status_effect/ants)
+ if(isnum(amount_left) && ants_remaining >= 1 && victim.stat < HARD_CRIT)
+ if(victim.stat < UNCONSCIOUS) // Unconcious people won't get messages
+ if(!prob(1)) // 99%
+ to_chat(victim, "You're covered in MORE ants!")
+ else // 1%
+ victim.say("AAHH! THIS SITUATION HAS ONLY BEEN MADE WORSE WITH THE ADDITION OF YET MORE ANTS!!", forced = /datum/status_effect/ants)
ants_remaining += amount_left
. = ..()
@@ -1010,7 +1012,7 @@
/datum/status_effect/ants/tick()
var/mob/living/carbon/human/victim = owner
victim.adjustBruteLoss(max(0.1, round((ants_remaining * 0.004),0.1))) //Scales with # of ants (lowers with time). Roughly 10 brute over 50 seconds.
- if(victim.stat <= SOFT_CRIT) //Makes sure people don't scratch at themselves while they're unconcious
+ if(victim.stat <= SOFT_CRIT) //Makes sure people don't scratch at themselves while they're in a critical condition
if(prob(15))
switch(rand(1,2))
if(1)
diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm
index 38ec6df4274..6b1652a7316 100644
--- a/code/game/objects/effects/decals/cleanable/humans.dm
+++ b/code/game/objects/effects/decals/cleanable/humans.dm
@@ -93,6 +93,7 @@
icon = 'icons/effects/blood.dmi'
icon_state = "gib1"
layer = LOW_OBJ_LAYER
+ plane = GAME_PLANE
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
mergeable_decal = FALSE
turf_loc_check = FALSE
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index e148462b5ba..c21a4205b7e 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -250,6 +250,7 @@
desc = "A split open garbage bag, its stinking content seems to be partially liquified. Yuck!"
icon = 'icons/obj/objects.dmi'
icon_state = "garbage"
+ plane = GAME_PLANE
layer = OBJ_LAYER //To display the decal over wires.
beauty = -150
clean_type = CLEAN_TYPE_HARD_DECAL
@@ -264,6 +265,7 @@
icon = 'icons/obj/objects.dmi'
icon_state = "ants"
beauty = -150
+ plane = GAME_PLANE
layer = LOW_OBJ_LAYER
var/ant_bite_damage = 0.1
var/ant_volume
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 480ea2b28eb..85c1a5b47c4 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -2764,9 +2764,21 @@
amount_left = round(reac_volume,0.1)
exposed_mob.apply_status_effect(STATUS_EFFECT_ANTS, amount_left)
+/datum/reagent/ants/expose_obj(obj/exposed_obj, reac_volume)
+ . = ..()
+ var/turf/open/my_turf = exposed_obj.loc // No dumping ants on an object in a storage slot
+ if(!istype(my_turf)) //Are we actually in an open turf?
+ return
+ var/static/list/accepted_types = typecacheof(list(/obj/machinery/atmospherics, /obj/structure/cable, /obj/structure/disposalpipe))
+ if(!accepted_types[exposed_obj.type]) // Bypasses pipes, vents, and cables to let people create ant mounds on top easily.
+ return
+ expose_turf(my_turf, reac_volume)
+
/datum/reagent/ants/expose_turf(turf/exposed_turf, reac_volume)
. = ..()
- if((reac_volume < 10) || isspaceturf(exposed_turf))
+ if(!istype(exposed_turf) || isspaceturf(exposed_turf)) // Is the turf valid
+ return
+ if((reac_volume <= 10)) // Makes sure people don't duplicate ants.
return
var/obj/effect/decal/cleanable/ants/pests = locate() in exposed_turf.contents