mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-18 18:42:08 +01:00
276 lines
8.0 KiB
Plaintext
276 lines
8.0 KiB
Plaintext
#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var)
|
|
|
|
/obj/effect/decal/cleanable/blood
|
|
name = "blood"
|
|
var/dryname = "dried blood"
|
|
desc = "It's thick and gooey. Perhaps it's the chef's cooking?"
|
|
var/drydesc = "It's dry and crusty. Someone is not doing their job."
|
|
gender = PLURAL
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "mfloor1"
|
|
random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
|
|
var/base_icon = 'icons/effects/blood.dmi'
|
|
var/list/viruses = list()
|
|
blood_DNA = list()
|
|
color = COLOR_HUMAN_BLOOD
|
|
var/basecolor = COLOR_HUMAN_BLOOD // Color when wet.
|
|
var/list/datum/disease2/disease/virus2 = list()
|
|
var/amount = 5
|
|
var/drytime
|
|
var/dries = TRUE
|
|
var/bleed_time
|
|
|
|
/obj/effect/decal/cleanable/blood/no_dry
|
|
dries = FALSE
|
|
|
|
/obj/effect/decal/cleanable/blood/reveal_blood()
|
|
if(!fluorescent)
|
|
fluorescent = 1
|
|
basecolor = COLOR_LUMINOL
|
|
update_icon()
|
|
|
|
/obj/effect/decal/cleanable/blood/clean_blood()
|
|
fluorescent = 0
|
|
if(invisibility != 100)
|
|
set_invisibility(100)
|
|
amount = 0
|
|
..(ignore=1)
|
|
|
|
/obj/effect/decal/cleanable/blood/hide()
|
|
return
|
|
|
|
/obj/effect/decal/cleanable/blood/Initialize(mapload)
|
|
. = ..()
|
|
fall_to_floor()
|
|
update_icon()
|
|
if(istype(src, /obj/effect/decal/cleanable/blood/gibs))
|
|
return
|
|
if(type == /obj/effect/decal/cleanable/blood)
|
|
if (isturf(loc))
|
|
for(var/obj/effect/decal/cleanable/blood/B in src.loc)
|
|
if(B != src)
|
|
if (B.blood_DNA)
|
|
blood_DNA |= B.blood_DNA.Copy()
|
|
QDEL_IN(B, 1 SECOND)
|
|
drytime = DRYING_TIME * (amount+1)
|
|
bleed_time = world.time
|
|
if (dries)
|
|
animate(src, color = "#000000", time = drytime, loop = 0, flags = ANIMATION_RELATIVE)
|
|
|
|
/obj/effect/decal/cleanable/blood/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
|
|
if(dries && world.time > (bleed_time + drytime))
|
|
name = dryname
|
|
desc = drydesc
|
|
. = ..()
|
|
|
|
/obj/effect/decal/cleanable/attackby(obj/item/attacking_item, mob/user)
|
|
if(istype(attacking_item, /obj/item/gun/energy/rifle/cult))
|
|
return TRUE
|
|
return ..()
|
|
|
|
/obj/effect/decal/cleanable/blood/update_icon()
|
|
if(basecolor == "rainbow")
|
|
basecolor = get_random_colour(1)
|
|
color = basecolor
|
|
|
|
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
|
|
if (!istype(perp))
|
|
return
|
|
if(dries && world.time > (bleed_time + drytime))
|
|
amount = 0
|
|
if(amount < 1)
|
|
return
|
|
|
|
LAZYINITLIST(blood_DNA)
|
|
|
|
var/obj/item/organ/external/l_foot = perp.get_organ(BP_L_FOOT)
|
|
var/obj/item/organ/external/r_foot = perp.get_organ(BP_R_FOOT)
|
|
var/hasfeet = 1
|
|
if((!l_foot || l_foot.is_stump()) && (!r_foot || r_foot.is_stump()))
|
|
hasfeet = 0
|
|
|
|
//If thrown (or leap manouvering), the mob is considered flying, so don't dirt its shoes
|
|
if(!perp.throwing)
|
|
|
|
if(perp.shoes && !perp.buckled_to)//Adding blood to shoes
|
|
var/obj/item/clothing/shoes/S = perp.shoes
|
|
if(istype(S))
|
|
if(S.item_flags & ITEM_FLAG_LIGHT_STEP)
|
|
return
|
|
S.blood_color = basecolor
|
|
S.track_footprint = max(amount, S.track_footprint)
|
|
if(!S.blood_overlay)
|
|
S.generate_blood_overlay()
|
|
if(!S.blood_DNA)
|
|
S.blood_DNA = list()
|
|
S.blood_overlay.color = basecolor
|
|
S.AddOverlays(S.blood_overlay)
|
|
if(S.blood_overlay && S.blood_overlay.color != basecolor)
|
|
S.CutOverlays(S.blood_overlay, ATOM_ICON_CACHE_PROTECTED)
|
|
S.blood_overlay.color = basecolor
|
|
S.AddOverlays(S.blood_overlay, ATOM_ICON_CACHE_PROTECTED)
|
|
if(blood_DNA)
|
|
S.blood_DNA |= blood_DNA.Copy()
|
|
|
|
else if(hasfeet) //Or feet
|
|
perp.footprint_color = basecolor
|
|
perp.track_footprint = max(amount,perp.track_footprint)
|
|
LAZYINITLIST(perp.feet_blood_DNA)
|
|
if(blood_DNA)
|
|
perp.feet_blood_DNA |= blood_DNA.Copy()
|
|
else if(perp.buckled_to && istype(perp.buckled_to, /obj/structure/bed/stool/chair/office/wheelchair))
|
|
var/obj/structure/bed/stool/chair/office/wheelchair/W = perp.buckled_to
|
|
W.bloodiness = 4
|
|
|
|
perp.update_inv_shoes(1)
|
|
amount--
|
|
|
|
//Point and laugh
|
|
if(amount > 2 && prob(perp.slip_chance(perp.m_intent == M_RUN ? 20 : 5)))
|
|
perp.slip(src, 4)
|
|
|
|
if(perp.throwing)
|
|
amount--
|
|
|
|
/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user)
|
|
..()
|
|
if(dries && world.time > (bleed_time + drytime))
|
|
amount = 0
|
|
if (amount && istype(user))
|
|
add_fingerprint(user)
|
|
if (user.gloves)
|
|
return
|
|
var/taken = rand(1,amount)
|
|
amount -= taken
|
|
to_chat(user, SPAN_NOTICE("You get some of \the [src] on your hands."))
|
|
LAZYINITLIST(user.blood_DNA)
|
|
|
|
if (blood_DNA)
|
|
user.blood_DNA |= blood_DNA.Copy()
|
|
|
|
user.bloody_hands = taken
|
|
user.hand_blood_color = basecolor
|
|
user.update_inv_gloves(1)
|
|
add_verb(user, /mob/living/carbon/human/proc/bloody_doodle)
|
|
|
|
/obj/effect/decal/cleanable/blood/splatter
|
|
random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5")
|
|
amount = 2
|
|
|
|
/obj/effect/decal/cleanable/blood/drip
|
|
name = "drips of blood"
|
|
desc = "It's red."
|
|
gender = PLURAL
|
|
icon = 'icons/effects/drip.dmi'
|
|
icon_state = "1"
|
|
random_icon_states = list("1","2","3","4","5")
|
|
amount = 0
|
|
var/list/drips
|
|
|
|
/obj/effect/decal/cleanable/blood/drip/Initialize()
|
|
. = ..()
|
|
drips = list(icon_state)
|
|
|
|
/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/Initialize()
|
|
. = ..()
|
|
if(LAZYLEN(random_icon_states))
|
|
for(var/obj/effect/decal/cleanable/blood/writing/W in loc)
|
|
random_icon_states -= W.icon_state
|
|
icon_state = pick(random_icon_states)
|
|
else
|
|
icon_state = "writing1"
|
|
|
|
/obj/effect/decal/cleanable/blood/writing/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
|
|
. = ..()
|
|
. += "It reads: <font color='[basecolor]'>\"[message]\"</font>"
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs
|
|
name = "gibs"
|
|
desc = "They look bloody and gruesome."
|
|
gender = PLURAL
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "gib1"
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5")
|
|
var/fleshcolor = "#FFFFFF"
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/update_icon()
|
|
|
|
var/image/giblets = new(base_icon, "[icon_state]_flesh", dir)
|
|
if(!fleshcolor || fleshcolor == "rainbow")
|
|
fleshcolor = get_random_colour(1)
|
|
giblets.color = fleshcolor
|
|
|
|
var/icon/blood = new(base_icon,"[icon_state]",dir)
|
|
if(basecolor == "rainbow") basecolor = get_random_colour(1)
|
|
blood.Blend(basecolor,ICON_MULTIPLY)
|
|
|
|
icon = blood
|
|
ClearOverlays()
|
|
AddOverlays(giblets)
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/up
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gibup1","gibup1","gibup1")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/down
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gibdown1","gibdown1","gibdown1")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/body
|
|
random_icon_states = list("gibhead", "gibtorso")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/limb
|
|
random_icon_states = list("gibleg", "gibarm")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/core
|
|
random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
|
|
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions)
|
|
set waitfor = FALSE
|
|
var/direction = pick(directions)
|
|
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
|
|
sleep(3)
|
|
if (i > 0)
|
|
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
|
|
b.basecolor = src.basecolor
|
|
b.update_icon()
|
|
if (step_to(src, get_step(src, direction), 0))
|
|
break
|
|
/obj/effect/decal/cleanable/blood/proc/fall_to_floor()
|
|
if (isopenturf(loc))
|
|
anchored = FALSE
|
|
ADD_FALLING_ATOM(src)
|
|
|
|
/obj/effect/decal/cleanable/blood/fall_impact()
|
|
. = ..()
|
|
anchored = initial(anchored)
|
|
|
|
/obj/effect/decal/cleanable/mucus
|
|
name = "mucus"
|
|
desc = "Disgusting mucus."
|
|
gender = PLURAL
|
|
density = 0
|
|
anchored = 1
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "mucus"
|
|
random_icon_states = null
|
|
|
|
var/list/datum/disease2/disease/virus2 = list()
|
|
|
|
/obj/effect/decal/cleanable/mucus/Initialize()
|
|
. = ..()
|
|
animate(src, color = "#000000", time = DRYING_TIME * 2, loop = 0, flags = ANIMATION_RELATIVE)
|
|
|
|
#undef DRYING_TIME
|