diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm
index 06243b1db8a..fc735b31ee4 100644
--- a/code/game/objects/effects/decals/crayon.dm
+++ b/code/game/objects/effects/decals/crayon.dm
@@ -6,6 +6,7 @@
layer = MID_TURF_LAYER
plane = GAME_PLANE //makes the graffiti visible over a wall.
anchored = TRUE
+ mergeable_decal = FALSE // Allows crayon drawings to overlap one another.
/obj/effect/decal/cleanable/crayon/Initialize(mapload, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune")
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 926da3d28cb..1f7ad5c132b 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -19,6 +19,7 @@
var/instant = 0
var/colourName = "red" //for updateIcon purposes
var/dat
+ var/busy = FALSE
var/list/validSurfaces = list(/turf/simulated/floor)
/obj/item/toy/crayon/suicide_act(mob/user)
@@ -80,22 +81,25 @@
/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity)
if(!proximity) return
+ if(busy) return
if(is_type_in_list(target,validSurfaces))
var/temp = "rune"
if(letters.Find(drawtype))
temp = "letter"
else if(graffiti.Find(drawtype))
temp = "graffiti"
- to_chat(user, "You start drawing a [temp] on the [target.name].")
+ to_chat(user, "You start drawing a [temp] on the [target.name].")
+ busy = TRUE
if(instant || do_after(user, 50 * toolspeed, target = target))
var/obj/effect/decal/cleanable/crayon/C = new /obj/effect/decal/cleanable/crayon(target,colour,drawtype,temp)
C.add_hiddenprint(user)
- to_chat(user, "You finish drawing [temp].")
+ to_chat(user, "You finish drawing [temp].")
if(uses)
uses--
if(!uses)
to_chat(user, "You used up your [name]!")
qdel(src)
+ busy = FALSE
/obj/item/toy/crayon/attack(mob/M, mob/user)
var/huffable = istype(src,/obj/item/toy/crayon/spraycan)