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