* Fixes excessive overlay chern Adding an overlay on every cross and uncross of every player (with how bloody the station gets this is called on just about every fucking movement, some times multiple times if there are multiple types of stains (oil, blood, alien, etc) is an excessive as fuck amount of chern in the overlay subsystem. This is likely the cause of overlays being so high. * I APOLOGIZE FOR NOTHING!
194 lines
6.4 KiB
Plaintext
194 lines
6.4 KiB
Plaintext
/obj/effect/decal/cleanable/blood
|
|
name = "blood"
|
|
desc = "It's red and gooey. Perhaps it's the chef's cooking?"
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "floor1"
|
|
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
|
|
blood_DNA = list()
|
|
blood_state = BLOOD_STATE_HUMAN
|
|
bloodiness = MAX_SHOE_BLOODINESS
|
|
|
|
/obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C)
|
|
if (C.blood_DNA)
|
|
blood_DNA |= C.blood_DNA.Copy()
|
|
..()
|
|
|
|
/obj/effect/decal/cleanable/blood/old
|
|
name = "dried blood"
|
|
desc = "Looks like it's been here a while. Eew."
|
|
bloodiness = 0
|
|
|
|
/obj/effect/decal/cleanable/blood/old/Initialize(mapload, list/datum/disease/diseases)
|
|
. = ..()
|
|
icon_state += "-old" //This IS necessary because the parent /blood type uses icon randomization.
|
|
blood_DNA["Non-human DNA"] = "A+"
|
|
|
|
/obj/effect/decal/cleanable/blood/splatter
|
|
random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5")
|
|
|
|
/obj/effect/decal/cleanable/blood/tracks
|
|
icon_state = "tracks"
|
|
desc = "They look like tracks left by wheels."
|
|
random_icon_states = null
|
|
|
|
/obj/effect/decal/cleanable/trail_holder //not a child of blood on purpose
|
|
name = "blood"
|
|
icon_state = "ltrails_1"
|
|
desc = "Your instincts say you shouldn't be following these."
|
|
random_icon_states = null
|
|
var/list/existing_dirs = list()
|
|
blood_DNA = list()
|
|
|
|
/obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in()
|
|
return 1
|
|
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs
|
|
name = "gibs"
|
|
desc = "They look bloody and gruesome."
|
|
icon = 'icons/effects/blood.dmi'
|
|
icon_state = "gibbl5"
|
|
layer = LOW_OBJ_LAYER
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
|
|
mergeable_decal = FALSE
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases)
|
|
. = ..()
|
|
reagents.add_reagent("liquidgibs", 5)
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target)
|
|
return
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions)
|
|
set waitfor = 0
|
|
var/direction = pick(directions)
|
|
for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50), i++)
|
|
sleep(2)
|
|
if(i > 0)
|
|
var/list/datum/disease/diseases
|
|
GET_COMPONENT(infective, /datum/component/infective)
|
|
if(infective)
|
|
diseases = infective.diseases
|
|
new /obj/effect/decal/cleanable/blood/splatter(loc, diseases)
|
|
if(!step_to(src, get_step(src, direction), 0))
|
|
break
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/up
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/down
|
|
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/body
|
|
random_icon_states = list("gibhead", "gibtorso")
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/torso
|
|
random_icon_states = list("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/old
|
|
name = "old rotting gibs"
|
|
desc = "Space Jesus, why didn't anyone clean this up? It smells terrible."
|
|
bloodiness = 0
|
|
|
|
/obj/effect/decal/cleanable/blood/gibs/old/Initialize(mapload, list/datum/disease/diseases)
|
|
. = ..()
|
|
setDir(pick(1,2,4,8))
|
|
icon_state += "-old"
|
|
blood_DNA["Non-human DNA"] = "A+"
|
|
|
|
|
|
/obj/effect/decal/cleanable/blood/drip
|
|
name = "drips of blood"
|
|
desc = "It's red."
|
|
icon_state = "1"
|
|
random_icon_states = list("drip1","drip2","drip3","drip4","drip5")
|
|
bloodiness = 0
|
|
var/drips = 1
|
|
|
|
|
|
/obj/effect/decal/cleanable/blood/drip/can_bloodcrawl_in()
|
|
return 1
|
|
|
|
|
|
//BLOODY FOOTPRINTS
|
|
/obj/effect/decal/cleanable/blood/footprints
|
|
name = "footprints"
|
|
icon = 'icons/effects/footprints.dmi'
|
|
icon_state = "nothingwhatsoever"
|
|
desc = "WHOSE FOOTPRINTS ARE THESE?"
|
|
random_icon_states = null
|
|
var/entered_dirs = 0
|
|
var/exited_dirs = 0
|
|
blood_state = BLOOD_STATE_HUMAN //the icon state to load images from
|
|
var/list/shoe_types = list()
|
|
|
|
/obj/effect/decal/cleanable/blood/footprints/Crossed(atom/movable/O)
|
|
..()
|
|
if(ishuman(O))
|
|
var/mob/living/carbon/human/H = O
|
|
var/obj/item/clothing/shoes/S = H.shoes
|
|
if(S && S.bloody_shoes[blood_state])
|
|
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
|
|
shoe_types |= S.type
|
|
if (!(entered_dirs & H.dir))
|
|
entered_dirs |= H.dir
|
|
update_icon()
|
|
|
|
/obj/effect/decal/cleanable/blood/footprints/Uncrossed(atom/movable/O)
|
|
..()
|
|
if(ishuman(O))
|
|
var/mob/living/carbon/human/H = O
|
|
var/obj/item/clothing/shoes/S = H.shoes
|
|
if(S && S.bloody_shoes[blood_state])
|
|
S.bloody_shoes[blood_state] = max(S.bloody_shoes[blood_state] - BLOOD_LOSS_PER_STEP, 0)
|
|
shoe_types |= S.type
|
|
if (!(exited_dirs & H.dir))
|
|
exited_dirs |= H.dir
|
|
update_icon()
|
|
|
|
|
|
/obj/effect/decal/cleanable/blood/footprints/update_icon()
|
|
cut_overlays()
|
|
|
|
for(var/Ddir in GLOB.cardinals)
|
|
if(entered_dirs & Ddir)
|
|
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"]
|
|
if(!bloodstep_overlay)
|
|
GLOB.bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]1", dir = Ddir)
|
|
add_overlay(bloodstep_overlay)
|
|
if(exited_dirs & Ddir)
|
|
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"]
|
|
if(!bloodstep_overlay)
|
|
GLOB.bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[blood_state]2", dir = Ddir)
|
|
add_overlay(bloodstep_overlay)
|
|
|
|
alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness
|
|
|
|
|
|
/obj/effect/decal/cleanable/blood/footprints/examine(mob/user)
|
|
. = ..()
|
|
if(shoe_types.len)
|
|
. += "You recognise the footprints as belonging to:\n"
|
|
for(var/shoe in shoe_types)
|
|
var/obj/item/clothing/shoes/S = shoe
|
|
. += "[icon2html(initial(S.icon), user)] Some <B>[initial(S.name)]</B>.\n"
|
|
|
|
to_chat(user, .)
|
|
|
|
/obj/effect/decal/cleanable/blood/footprints/replace_decal(obj/effect/decal/cleanable/C)
|
|
if(blood_state != C.blood_state) //We only replace footprints of the same type as us
|
|
return
|
|
..()
|
|
|
|
/obj/effect/decal/cleanable/blood/footprints/can_bloodcrawl_in()
|
|
if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY))
|
|
return 1
|
|
return 0
|
|
|