diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 43fbdea11a5..a4b6b120c25 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -1,3 +1,114 @@
+/*
+ * Crayons
+ */
+
+/obj/item/toy/crayon
+ name = "crayon"
+ desc = "A colourful crayon. Looks tasty. Mmmm..."
+ icon = 'icons/obj/crayons.dmi'
+ icon_state = "crayonred"
+ w_class = 1.0
+ attack_verb = list("attacked", "coloured")
+ var/colour = "#FF0000" //RGB
+ var/drawtype = "rune"
+ var/list/graffiti = list("body","amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","up","down","left","right","heart","borgsrogue","voxpox","shitcurity","catbeast","hieroglyphs1","hieroglyphs2","hieroglyphs3","security","syndicate1","syndicate2","nanotrasen","lie","dick1","dick2","dick3","valid")
+ var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
+ var/uses = 30 //0 for unlimited uses
+ var/instant = 0
+ var/colourName = "red" //for updateIcon purposes
+ var/dat
+ var/list/validSurfaces = list(/turf/simulated/floor)
+
+/obj/item/toy/crayon/suicide_act(mob/user)
+ user.visible_message("[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.")
+ return (BRUTELOSS|OXYLOSS)
+
+/obj/item/toy/crayon/New()
+ ..()
+ name = "[colourName] crayon" //Makes crayons identifiable in things like grinders
+ drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,10)]")
+
+/obj/item/toy/crayon/attack_self(mob/living/user as mob)
+ update_window(user)
+
+/obj/item/toy/crayon/proc/update_window(mob/living/user as mob)
+ dat += "
Currently selected: [drawtype]
"
+ dat += "Random letterPick letter"
+ dat += "
"
+ dat += "Runes:
"
+ dat += "Random rune"
+ for(var/i = 1; i <= 10; i++)
+ dat += "Rune[i]"
+ if(!((i + 1) % 3)) //3 buttons in a row
+ dat += "
"
+ dat += "
"
+ graffiti.Find()
+ dat += "Graffiti:
"
+ dat += "Random graffiti"
+ var/c = 1
+ for(var/T in graffiti)
+ dat += "[T]"
+ if(!((c + 1) % 3)) //3 buttons in a row
+ dat += "
"
+ c++
+ dat += "
"
+ var/datum/browser/popup = new(user, "crayon", name, 300, 500)
+ popup.set_content(dat)
+ popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
+ popup.open()
+ dat = ""
+
+/obj/item/toy/crayon/Topic(href, href_list, hsrc)
+ var/temp = "a"
+ switch(href_list["type"])
+ if("random_letter")
+ temp = pick(letters)
+ if("letter")
+ temp = input("Choose the letter.", "Scribbles") in letters
+ if("random_rune")
+ temp = "rune[rand(1,10)]"
+ if("random_graffiti")
+ temp = pick(graffiti)
+ else
+ temp = href_list["type"]
+ if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
+ return
+ drawtype = temp
+ update_window(usr)
+
+/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity)
+ if(!proximity) return
+ if(is_type_in_list(target,validSurfaces))
+ var/temp = "rune"
+ if(letters.Find(drawtype))
+ temp = "letter"
+ else if(graffiti.Find(drawtype))
+ temp = "graffiti"
+ user << "You start drawing a [temp] on the [target.name]."
+ if(instant || do_after(user, 50))
+ new /obj/effect/decal/cleanable/crayon(target,colour,drawtype,temp)
+ user << "You finish drawing [temp]."
+ if(uses)
+ uses--
+ if(!uses)
+ user << "You used up your [src.name]!"
+ qdel(src)
+ return
+
+/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
+ var/huffable = istype(src,/obj/item/toy/crayon/spraycan)
+ if(M == user)
+ user << "You take a [huffable ? "huff" : "bite"] of the [src.name]. Delicious!"
+ user.nutrition += 5
+ if(uses)
+ uses -= 5
+ if(uses <= 0)
+ user << "There is no more of [src.name] left!"
+ qdel(src)
+ else
+ ..()
+
+
/obj/item/toy/crayon/red
icon_state = "crayonred"
colour = "#DA0000"
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index f675e472702..2b76b4750a3 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -8,7 +8,6 @@
* Toy Tommy Gun
* Toy swords
* Toy mechs
- * Crayons
* Snap pops
* Water flower
* Toy Nuke
@@ -432,116 +431,6 @@
user.visible_message("[dmsg] It looks like they are trying to commit suicide.")
return (BRUTELOSS)
-/*
- * Crayons
- */
-
-/obj/item/toy/crayon
- name = "crayon"
- desc = "A colourful crayon. Looks tasty. Mmmm..."
- icon = 'icons/obj/crayons.dmi'
- icon_state = "crayonred"
- w_class = 1.0
- attack_verb = list("attacked", "coloured")
- var/colour = "#FF0000" //RGB
- var/drawtype = "rune"
- var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka")
- var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
- var/uses = 30 //0 for unlimited uses
- var/instant = 0
- var/colourName = "red" //for updateIcon purposes
- var/dat
- var/list/validSurfaces = list(/turf/simulated/floor)
-
-/obj/item/toy/crayon/suicide_act(mob/user)
- user.visible_message("[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.")
- return (BRUTELOSS|OXYLOSS)
-
-/obj/item/toy/crayon/New()
- ..()
- name = "[colourName] crayon" //Makes crayons identifiable in things like grinders
- drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,10)]")
-
-/obj/item/toy/crayon/attack_self(mob/living/user as mob)
- update_window(user)
-
-/obj/item/toy/crayon/proc/update_window(mob/living/user as mob)
- dat += "Currently selected: [drawtype]
"
- dat += "Random letterPick letter"
- dat += "
"
- dat += "Runes:
"
- dat += "Random rune"
- for(var/i = 1; i <= 10; i++)
- dat += "Rune[i]"
- if(!((i + 1) % 3)) //3 buttons in a row
- dat += "
"
- dat += "
"
- graffiti.Find()
- dat += "Graffiti:
"
- dat += "Random graffiti"
- var/c = 1
- for(var/T in graffiti)
- dat += "[T]"
- if(!((c + 1) % 3)) //3 buttons in a row
- dat += "
"
- c++
- dat += "
"
- var/datum/browser/popup = new(user, "crayon", name, 300, 500)
- popup.set_content(dat)
- popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
- popup.open()
- dat = ""
-
-/obj/item/toy/crayon/Topic(href, href_list, hsrc)
- var/temp = "a"
- switch(href_list["type"])
- if("random_letter")
- temp = pick(letters)
- if("letter")
- temp = input("Choose the letter.", "Scribbles") in letters
- if("random_rune")
- temp = "rune[rand(1,10)]"
- if("random_graffiti")
- temp = pick(graffiti)
- else
- temp = href_list["type"]
- if ((usr.restrained() || usr.stat || usr.get_active_hand() != src))
- return
- drawtype = temp
- update_window(usr)
-
-/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity)
- if(!proximity) return
- if(is_type_in_list(target,validSurfaces))
- var/temp = "rune"
- if(letters.Find(drawtype))
- temp = "letter"
- else if(graffiti.Find(drawtype))
- temp = "graffiti"
- user << "You start drawing a [temp] on the [target.name]."
- if(instant || do_after(user, 50))
- new /obj/effect/decal/cleanable/crayon(target,colour,drawtype,temp)
- user << "You finish drawing [temp]."
- if(uses)
- uses--
- if(!uses)
- user << "You used up your [src.name]!"
- qdel(src)
- return
-
-/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
- var/huffable = istype(src,/obj/item/toy/crayon/spraycan)
- if(M == user)
- user << "You take a [huffable ? "huff" : "bite"] of the [src.name]. Delicious!"
- user.nutrition += 5
- if(uses)
- uses -= 5
- if(uses <= 0)
- user << "There is no more of [src.name] left!"
- qdel(src)
- else
- ..()
-
/*
* Snap pops viral shit
diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi
index 1552d6d8e4e..9f12a245f02 100644
Binary files a/icons/effects/crayondecal.dmi and b/icons/effects/crayondecal.dmi differ