Files
Batrachophreno 28a4128ab8 Qol and bugfix variety pack (#21367)
changes:
  - qol: "Added detailed extended examine info on mechanics to pens."
- qol: "Added detailed extended examine info on mechanics to the
psychiatrist/chaplain Mesmetron."
- qol: "Added detailed extended examine info on mechanics to
barricades."
- qol: "Added some extended examine info to (hanging) flags, crayons,
misc."
  - code_imp: "Updated dmdocs in many locations."
- bugfix: "You can no longer force-feed people crayons. However, you can
still offer a bite of crayon for them to accept or refuse, for
tradition's sake."
- bugfix: "Reading the contents of a noticeboard now makes you actually
face the noticeboard."
2025-09-28 12:12:48 +00:00

180 lines
6.6 KiB
Plaintext

/obj/item/pen/crayon
icon = 'icons/obj/storage/fancy/crayon.dmi'
/obj/item/pen/crayon/red
icon_state = "crayonred"
colour = "#DA0000"
shadeColour = "#810C0C"
colourName = "red"
reagents_to_add = list(/singleton/reagent/crayon_dust/red = 10)
/obj/item/pen/crayon/orange
icon_state = "crayonorange"
colour = "#FF9300"
shadeColour = "#A55403"
colourName = "orange"
reagents_to_add = list(/singleton/reagent/crayon_dust/orange = 10)
/obj/item/pen/crayon/yellow
icon_state = "crayonyellow"
colour = "#FFF200"
shadeColour = "#886422"
colourName = "yellow"
reagents_to_add = list(/singleton/reagent/crayon_dust/yellow = 10)
/obj/item/pen/crayon/green
icon_state = "crayongreen"
colour = "#A8E61D"
shadeColour = "#61840F"
colourName = "green"
reagents_to_add = list(/singleton/reagent/crayon_dust/green = 10)
/obj/item/pen/crayon/blue
icon_state = "crayonblue"
colour = "#00B7EF"
shadeColour = "#0082A8"
colourName = "blue"
reagents_to_add = list(/singleton/reagent/crayon_dust/blue = 10)
/obj/item/pen/crayon/purple
icon_state = "crayonpurple"
colour = "#DA00FF"
shadeColour = "#810CFF"
colourName = "purple"
reagents_to_add = list(/singleton/reagent/crayon_dust/purple = 10)
/obj/item/pen/crayon/mime
icon_state = "crayonmime"
desc = "A very sad-looking crayon."
colour = "#FFFFFF"
shadeColour = "#000000"
colourName = "mime"
reagents_to_add = list(/singleton/reagent/crayon_dust/grey = 15)
/obj/item/pen/crayon/mime/attack_self(mob/living/user as mob) //inversion
if(colour != "#FFFFFF" && shadeColour != "#000000")
colour = "#FFFFFF"
shadeColour = "#000000"
to_chat(user, "You will now draw in white and black with this crayon.")
else
colour = "#000000"
shadeColour = "#FFFFFF"
to_chat(user, "You will now draw in black and white with this crayon.")
return
/obj/item/pen/crayon/rainbow
icon_state = "crayonrainbow"
colour = "#FFF000"
shadeColour = "#000FFF"
colourName = "rainbow"
reagents_to_add = list(/singleton/reagent/crayon_dust/brown = 20)
/obj/item/crayon/rainbow/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Use this on yourself to change the current primary and shade colors."
/obj/item/pen/crayon/rainbow/attack_self(mob/living/user as mob)
colour = input(user, "Please select the main colour.", "Crayon colour") as color
shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color
return
/obj/item/pen/crayon/augment
icon_state = "crayonaugment"
colour = "#FFF200"
shadeColour = "#886422"
desc = "A crayon that is integrated into a user's finger. It can synthesize a multitude of colors."
/obj/item/crayon/augment/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Use this on yourself to change the current primary and shade colors."
/obj/item/pen/crayon/augment/Initialize()
. = ..()
name = "integrated crayon"
update_icon()
/obj/item/pen/crayon/augment/attack_self(mob/living/user)
colour = input(user, "Please select the main colour.", "Crayon colour") as color
shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
update_icon()
/obj/item/pen/crayon/augment/update_icon()
ClearOverlays()
var/image/crayon_tip = image('icons/obj/crayons.dmi', "crayonaugment_tip")
crayon_tip.color = colour
AddOverlays(crayon_tip)
/obj/item/pen/crayon/augment/throw_at(atom/target, range, speed, mob/user)
user.drop_from_inventory(src)
/obj/item/pen/crayon/augment/dropped()
. = ..()
loc = null
qdel(src)
/obj/item/pen/crayon/afterattack(atom/target, mob/user as mob, proximity)
if(!proximity) return
if(istype(target,/turf/simulated/floor))
var/originaloc = user.loc
var/drawtype = input("Choose what you'd like to draw.", "Crayon scribbles") in list("graffiti","rune","letter","arrow")
if (user.loc != originaloc)
to_chat(user, SPAN_NOTICE("You moved!"))
return
switch(drawtype)
if("letter")
drawtype = input("Choose the letter.", "Crayon scribbles") in 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")
to_chat(user, "You start drawing a letter on the [target.name].")
if("graffiti")
to_chat(user, "You start drawing graffiti on the [target.name].")
if("rune")
to_chat(user, "You start drawing a rune on the [target.name].")
if("arrow")
drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down")
to_chat(user, "You start drawing an arrow on the [target.name].")
if(instant || do_after(user, 50))
new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
to_chat(user, "You finish drawing.")
target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on.
if(reagents && LAZYLEN(reagents_to_add))
for(var/singleton/reagent/R in reagents_to_add)
reagents.remove_reagent(R,0.5/LAZYLEN(reagents_to_add)) //using crayons reduces crayon dust in it.
if(!reagents.has_all_reagents(reagents_to_add))
to_chat(user, SPAN_WARNING("You used up your crayon!"))
qdel(src)
return
/obj/item/pen/crayon/attack(mob/living/target_mob, mob/living/user, target_zone)
if(ishuman(target_mob))
var/mob/living/carbon/human/H = target_mob
if(H.check_has_mouth())
// The end of an era: no more force-feeding people crayons.
if(user != target_mob)
var/crayon_eater_response = alert(target_mob, "[user] is trying to feed you a crayon. How hungry are you?", "Hunger", "Very hungry!", "Not that hungry.")
// The ungrateful bastard doesn't want to eat any crayon.
if(crayon_eater_response == "Not that hungry.")
target_mob.visible_message(SPAN_NOTICE("[target_mob] pushes away the crayon [user] held out for them to eat."),
SPAN_NOTICE("[target_mob] doesn't want seem to eat any crayon right now."))
return TRUE
// Yum yum! This message is handled separately to make it Very Clear to observers that someone is hand-feeding someone else a crayon.
else
target_mob.visible_message(SPAN_NOTICE("[target_mob] takes a bite of the crayon held out by [user] and swallows it."),
SPAN_NOTICE("You take a bite of crayon and swallow it."))
else
target_mob.visible_message(SPAN_NOTICE("[target_mob] takes a bite of crayon and swallows it."),
SPAN_NOTICE("You take a bite of crayon and swallow it."))
target_mob.adjustNutritionLoss(-1)
reagents.trans_to_mob(target_mob, 2, CHEM_INGEST)
if(reagents.total_volume <= 0)
target_mob.visible_message(SPAN_NOTICE("[target_mob] finished their crayon!"), SPAN_WARNING("You ate your crayon!"))
qdel(src)
return TRUE
else
return ..()
/obj/item/pen/crayon/attack_self(var/mob/user)
return