diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index fe8fe4138bd..43fbdea11a5 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -81,4 +81,62 @@
colour = temp
update_window(usr)
else
- ..()
\ No newline at end of file
+ ..()
+
+
+//Spraycan stuff
+
+/obj/item/toy/crayon/spraycan
+ icon_state = "spraycan_cap"
+ desc = "A metallic container containing tasty paint."
+ var/capped = 1
+ instant = 1
+ validSurfaces = list(/turf/simulated/floor,/turf/simulated/wall)
+
+/obj/item/toy/crayon/spraycan/New()
+ ..()
+ name = "NanoTrasen-brand Rapid Paint Applicator"
+ update_icon()
+
+/obj/item/toy/crayon/spraycan/attack_self(mob/living/user as mob)
+ var/choice = input(user,"Spraycan options") in list("Toggle Cap","Change Drawing","Change Color")
+ switch(choice)
+ if("Toggle Cap")
+ user << "You [capped ? "Remove" : "Replace"] the cap of the [src]"
+ capped = capped ? 0 : 1
+ icon_state = "spraycan[capped ? "_cap" : ""]"
+ update_icon()
+ if("Change Drawing")
+ ..()
+ if("Change Color")
+ colour = input(user,"Choose Color") as color
+ update_icon()
+
+/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user as mob, proximity)
+ if(!proximity)
+ return
+ if(capped)
+ return
+ else
+ if(iscarbon(target))
+ if(uses-10 > 0)
+ uses = uses - 10
+ var/mob/living/carbon/human/C = target
+ user.visible_message(" [user] sprays [src] into the face of [target]!")
+ if(C.client)
+ C.eye_blurry = max(C.eye_blurry, 3)
+ C.eye_blind = max(C.eye_blind, 1)
+ if(C.eyecheck() <= 0) // no eye protection? ARGH IT BURNS.
+ C.confused = max(C.confused, 3)
+ C.Weaken(3)
+ C.lip_style = "spray_face"
+ C.lip_color = colour
+ C.update_body()
+ playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
+ ..()
+
+/obj/item/toy/crayon/spraycan/update_icon()
+ overlays.Cut()
+ var/image/I = image('icons/obj/crayons.dmi',icon_state = "[capped ? "spraycan_cap_colors" : "spraycan_colors"]")
+ I.color = colour
+ overlays += I
\ No newline at end of file
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 84538d70327..765b388c1d9 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -451,6 +451,7 @@
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.")
@@ -497,7 +498,7 @@
if("random_letter")
temp = pick(letters)
if("letter")
- temp = input("Choose the letter.", "Crayon scribbles") in letters
+ temp = input("Choose the letter.", "Scribbles") in letters
if("random_rune")
temp = "rune[rand(1,6)]"
if("random_graffiti")
@@ -511,7 +512,7 @@
/obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity)
if(!proximity) return
- if(istype(target,/turf/simulated/floor))
+ if(is_type_in_list(target,validSurfaces))
var/temp = "rune"
if(letters.Find(drawtype))
temp = "letter"
@@ -524,18 +525,19 @@
if(uses)
uses--
if(!uses)
- user << "You used up your crayon!"
+ 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 bite of the crayon. Delicious!"
+ user << "You take a [huffable ? "huff" : "bite"] of the [src.name]. Delicious!"
user.nutrition += 5
if(uses)
uses -= 5
if(uses <= 0)
- user << "You ate your crayon!"
+ user << "There is no more of [src.name] left!"
qdel(src)
else
..()
diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm
index 5ebe282547f..d26e8c5a408 100644
--- a/code/game/objects/items/weapons/cosmetics.dm
+++ b/code/game/objects/items/weapons/cosmetics.dm
@@ -7,35 +7,38 @@
var/colour = "red"
var/open = 0
-
/obj/item/weapon/lipstick/purple
name = "purple lipstick"
colour = "purple"
/obj/item/weapon/lipstick/jade
+ //It's still called Jade, but theres no HTML color for jade, so we use lime.
name = "jade lipstick"
- colour = "jade"
+ colour = "lime"
/obj/item/weapon/lipstick/black
name = "black lipstick"
colour = "black"
-
/obj/item/weapon/lipstick/random
name = "lipstick"
/obj/item/weapon/lipstick/random/New()
- colour = pick("red","purple","jade","black")
+ colour = pick("red","purple","lime","black","green","blue","white")
name = "[colour] lipstick"
/obj/item/weapon/lipstick/attack_self(mob/user as mob)
+ overlays.Cut()
user << "You twist \the [src] [open ? "closed" : "open"]."
open = !open
if(open)
- icon_state = "[initial(icon_state)]_[colour]"
+ var/image/colored = image("icon"='icons/obj/items.dmi', "icon_state"="lipstick_uncap_color")
+ colored.color = colour
+ icon_state = "lipstick_uncap"
+ overlays += colored
else
- icon_state = initial(icon_state)
+ icon_state = "lipstick"
/obj/item/weapon/lipstick/attack(mob/M as mob, mob/user as mob)
if(!open) return
@@ -50,7 +53,8 @@
if(H == user)
user.visible_message("[user] does their lips with \the [src].", \
"You take a moment to apply \the [src]. Perfect!")
- H.lip_style = colour
+ H.lip_style = "lipstick"
+ H.lip_color = colour
H.update_body()
else
user.visible_message("[user] begins to do [H]'s lips with \the [src].", \
@@ -58,33 +62,12 @@
if(do_after(user, 20) && do_after(H, 20, 5, 0)) //user needs to keep their active hand, H does not.
user.visible_message("[user] does [H]'s lips with \the [src].", \
"You apply \the [src].")
- H.lip_style = colour
+ H.lip_style = "lipstick"
+ H.lip_color = colour
H.update_body()
else
user << "Where are the lips on that?"
-//you can wipe off lipstick with paper!
-/obj/item/weapon/paper/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
- if(user.zone_sel.selecting == "mouth")
- if(!istype(M, /mob)) return
-
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H == user)
- user << "You wipe off the lipstick with [src]."
- H.lip_style = null
- H.update_body()
- else
- user.visible_message("[user] begins to wipe [H]'s lipstick off with \the [src].", \
- "You begin to wipe off [H]'s lipstick.")
- if(do_after(user, 10) && do_after(H, 10, 5, 0)) //user needs to keep their active hand, H does not.
- user.visible_message("[user] wipes [H]'s lipstick off with \the [src].", \
- "You wipe off [H]'s lipstick.")
- H.lip_style = null
- H.update_body()
- else
- ..()
-
/obj/item/weapon/razor
name = "electric razor"
desc = "The latest and greatest power razor born from the science of shaving."
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index b792385f581..1391855aa10 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -24,6 +24,7 @@
var/b_skin = 0
var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup
+ var/lip_color = "white"
var/age = 30 //Player's age (pure fluff)
var/b_type = "A+" //Player's bloodtype
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 7223899e84e..e47c6356b95 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -332,6 +332,12 @@ proc/get_damage_icon_part(damage_state, body_part)
if(update_icons)
update_icons()
+ if(lip_style && species && species.flags & HAS_LIPS)
+ var/icon/lips = icon("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s")
+ lips.Blend(lip_color, ICON_ADD)
+
+ stand_icon.Blend(lips, ICON_OVERLAY)
+
//tail
update_tail_showing(0)
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index eb618a6e516..67adaaae87c 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -42,7 +42,9 @@ var/global/list/limb_icon_cache = list()
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
if(owner.lip_style && (owner.species && (owner.species.flags & HAS_LIPS)))
- mob_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s"), ICON_OVERLAY)
+ var/image/lips = image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[owner.lip_style]_s")
+ lips.color = owner.lip_color
+ mob_icon.Blend(lips, ICON_OVERLAY)
if(owner.f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 374b86eea8d..ac55fa53d1a 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -114,21 +114,25 @@
" [user] holds up a paper and shows it to [M]. ")
src.examine(user)
- else if(user.zone_sel.selecting == "mouth") // lipstick wiping
+ else if(user.zone_sel.selecting == "mouth")
+ if(!istype(M, /mob)) return
+
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H == user)
- user << "You wipe off the lipstick with [src]."
+ user << "You wipe off your face with [src]."
H.lip_style = null
H.update_body()
else
- user.visible_message("[user] begins to wipe [H]'s lipstick off with \the [src].", \
- "You begin to wipe off [H]'s lipstick.")
+ user.visible_message("[user] begins to wipe [H]'s face clean with \the [src].", \
+ "You begin to wipe off [H]'s face.")
if(do_after(user, 10) && do_after(H, 10, 5, 0)) //user needs to keep their active hand, H does not.
- user.visible_message("[user] wipes [H]'s lipstick off with \the [src].", \
- "You wipe off [H]'s lipstick.")
+ user.visible_message("[user] wipes [H]'s face clean with \the [src].", \
+ "You wipe off [H]'s face.")
H.lip_style = null
H.update_body()
+ else
+ ..()
/obj/item/weapon/paper/proc/addtofield(var/id, var/text, var/links = 0)
var/locid = 0
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 09d27ee57dc..a87024ae259 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -1075,6 +1075,11 @@ datum
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(iscarbon(M))
var/mob/living/carbon/C = M
+ if(istype(M,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(H.lip_style)
+ H.lip_style = null
+ H.update_body()
if(C.r_hand)
C.r_hand.clean_blood()
if(C.l_hand)
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 2cce7c7475d..50a3ef773b1 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -98,6 +98,14 @@
build_path = /obj/item/weapon/wrench
category = list("initial","Tools")
+/datum/design/spraycan
+ name = "Spraycan"
+ id = "spraycan"
+ build_type = AUTOLATHE
+ materials = list("$metal" = 100, "$glass" = 100)
+ build_path = /obj/item/toy/crayon/spraycan
+ category = list("initial", "Tools")
+
/datum/design/airalarm_electronics
name = "Air Alarm Electronics"
id = "airalarm_electronics"
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 2f78bcab913..727d0d901cb 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/obj/crayons.dmi b/icons/obj/crayons.dmi
index 6e408c15d25..95f54cc5a19 100644
Binary files a/icons/obj/crayons.dmi and b/icons/obj/crayons.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 6025a1d5cdb..274f1d888de 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ