diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index 11d76d3cdf..b447b46754 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -5,6 +5,8 @@
var/persistent = FALSE
/// Can we stack multiple in one tile?
var/persistence_allow_stacking = FALSE
+ /// Are we deleted by turf changes?
+ var/wiped_by_turf_change = FALSE
var/list/random_icon_states = null
var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index b4c3a3acec..e2cd40a1af 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -64,6 +64,7 @@
beauty = -75
mergeable_decal = TRUE
persistent = TRUE
+ wiped_by_turf_change = TRUE
/obj/effect/decal/cleanable/dirt/Initialize(mapload)
. = ..()
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 6a95a4a95d..6a4ddea63b 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -138,6 +138,9 @@
burnt = 1
/turf/open/floor/proc/make_plating()
+ for(var/obj/effect/decal/cleanable/C in src)
+ if(C.wiped_by_floor_change)
+ qdel(C)
return ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
/turf/open/floor/ChangeTurf(path, new_baseturf, flags)
diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm
index 35ee06a584..539fcb63e0 100644
--- a/code/game/turfs/simulated/floor/plating.dm
+++ b/code/game/turfs/simulated/floor/plating.dm
@@ -61,6 +61,9 @@
to_chat(user, "You begin reinforcing the floor...")
if(do_after(user, 30, target = src))
if (R.get_amount() >= 2 && !istype(src, /turf/open/floor/engine))
+ for(var/obj/effect/decal/cleanable/C in src)
+ if(C.wiped_by_floor_change)
+ qdel(C)
PlaceOnTop(/turf/open/floor/engine, flags = CHANGETURF_INHERIT_AIR)
playsound(src, 'sound/items/deconstruct.ogg', 80, 1)
R.use(2)
@@ -78,6 +81,9 @@
to_chat(user, "You begin adding glass to the floor...")
if(do_after(user, 5, target = src))
if (G.get_amount() >= 2 && !istype(src, /turf/open/transparent/glass))
+ for(var/obj/effect/decal/cleanable/C in src)
+ if(C.wiped_by_floor_change)
+ qdel(C)
PlaceOnTop(/turf/open/transparent/glass, flags = CHANGETURF_INHERIT_AIR)
playsound(src, 'sound/items/deconstruct.ogg', 80, 1)
G.use(2)
@@ -95,6 +101,9 @@
to_chat(user, "You begin adding reinforced glass to the floor...")
if(do_after(user, 10, target = src))
if (RG.get_amount() >= 2 && !istype(src, /turf/open/transparent/glass/reinforced))
+ for(var/obj/effect/decal/cleanable/C in src)
+ if(C.wiped_by_floor_change)
+ qdel(C)
PlaceOnTop(/turf/open/transparent/glass/reinforced, flags = CHANGETURF_INHERIT_AIR)
playsound(src, 'sound/items/deconstruct.ogg', 80, 1)
RG.use(2)
@@ -110,6 +119,9 @@
var/obj/item/stack/tile/W = C
if(!W.use(1))
return
+ for(var/obj/effect/decal/cleanable/C in src)
+ if(C.wiped_by_floor_change)
+ qdel(C)
if(istype(W, /obj/item/stack/tile/material))
var/turf/newturf = PlaceOnTop(/turf/open/floor/material, flags = CHANGETURF_INHERIT_AIR)
newturf.set_custom_materials(W.custom_materials)
diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm
index 42b4707b50..f8c6ff1ce2 100644
--- a/code/game/turfs/simulated/floor/reinf_floor.dm
+++ b/code/game/turfs/simulated/floor/reinf_floor.dm
@@ -43,6 +43,9 @@
return TRUE
if(floor_tile)
new floor_tile(src, 2)
+ for(var/obj/effect/decal/cleanable/C in src)
+ if(C.wiped_by_floor_change)
+ qdel(C)
ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
return TRUE