diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 23d76f7094e..0013d531067 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -70,10 +70,45 @@ spawn(DRYING_TIME) Del() +/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user) + ..() + if (amount && istype(user)) + add_fingerprint(user) + if (user.gloves) + return + var/taken = rand(1,amount) + amount -= taken + user << "You get some blood on your hands." + if (!user.blood_DNA) + user.blood_DNA = list() + user.blood_DNA |= blood_DNA.Copy() + user.bloody_hands += taken + user.update_inv_gloves(1) + user.verbs += /mob/living/carbon/human/proc/bloody_doodle + /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") amount = 2 +/obj/effect/decal/cleanable/blood/writing + icon_state = "tracks" + desc = "It looks like a writing in blood." + gender = NEUTER + random_icon_states = list("writing1","writing2","writing3","writing4","writing5") + amount = 0 + var/message + +/obj/effect/decal/cleanable/blood/writing/New() + ..() + for(var/obj/effect/decal/cleanable/blood/writing/W in loc) + random_icon_states.Remove(W.icon_state) + icon_state = pick(random_icon_states) + +/obj/effect/decal/cleanable/blood/writing/examine() + ..() + usr << "It reads: \"[message]\"" + + /obj/effect/decal/cleanable/blood/green name = "green blood" desc = "It's green and gooey. Perhaps it's the chef's cooking?" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a5c37346cc2..9b94b22085a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1186,6 +1186,7 @@ src.update_inv_gloves(1,1) //handles bloody hands overlays and updating else src.update_inv_gloves(1,0) + verbs += /mob/living/carbon/human/proc/bloody_doodle return 1 //we applied blood to the item /mob/living/carbon/human/clean_blood() @@ -1363,3 +1364,54 @@ mob/living/carbon/human/yank_out_object() return 1 else return 0 + + +/mob/living/carbon/human/proc/bloody_doodle() + set category = "IC" + set name = "Write in blood" + set desc = "Use blood on your hands to write a short message on the floor or a wall, murder mystery style." + + if (usr != src) + return 0 //something is terribly wrong + + if (!bloody_hands) + verbs -= /mob/living/carbon/human/proc/bloody_doodle + + if (src.gloves) + src << "Your [src.gloves] are getting in the way." + return + + var/turf/simulated/T = src.loc + if (!istype(T)) //to prevent doodling out of mechs and lockers + src << "You cannot reach the floor." + return + + var/direction = input(src,"Which way?","Tile selection") as anything in list("Here","North","South","East","West") + if (direction != "Here") + T = get_step(T,text2dir(direction)) + if (!istype(T)) + src << "You cannot doodle there." + return + + var/num_doodles = 0 + for (var/obj/effect/decal/cleanable/blood/writing/W in T) + num_doodles++ + if (num_doodles > 4) + src << "There is no space to write on!" + return + + var/max_length = bloody_hands * 30 //tweeter style + + var/message = stripped_input(src,"Write a message. It cannot be longer than [max_length] characters.","Blood writing", "") + + if (message) + var/used_blood_amount = round(length(message) / 30, 1) + bloody_hands = max(0, bloody_hands - used_blood_amount) //use up some blood + + if (length(message) > max_length) + message += "-" + src << "You ran out of blood to write with!" + + var/obj/effect/decal/cleanable/blood/writing/W = new(T) + W.message = message + W.add_fingerprint(src) \ No newline at end of file diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 71df0e9bcd2..90acdae7be1 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ