+3
-18
@@ -255,7 +255,7 @@
|
||||
f_name = "some "
|
||||
else
|
||||
f_name = "a "
|
||||
f_name += "<span class='danger'>stained</span> [name]!"
|
||||
f_name += "<span class='danger'>blood-stained</span> [name]!"
|
||||
|
||||
to_chat(user, "[icon2html(src, user)] That's [f_name]")
|
||||
|
||||
@@ -366,11 +366,8 @@
|
||||
//to add blood from a mob onto something, and transfer their dna info
|
||||
/atom/proc/add_mob_blood(mob/living/M)
|
||||
var/list/blood_dna = M.get_blood_dna_list()
|
||||
blood_color = BLOOD_COLOR_HUMAN
|
||||
if(!blood_dna)
|
||||
return FALSE
|
||||
if(M.blood_DNA.len)
|
||||
blood_color = M.blood_DNA_to_color()
|
||||
return add_blood(blood_dna)
|
||||
|
||||
//to add blood onto something, with blood dna info to include.
|
||||
@@ -383,30 +380,18 @@
|
||||
/obj/item/add_blood(list/blood_dna)
|
||||
if(!..())
|
||||
return FALSE
|
||||
|
||||
//if we haven't made our blood_overlay already
|
||||
if(!blood_overlay )
|
||||
add_blood_overlay()
|
||||
|
||||
//apply the blood-splatter overlay if it isn't already in there
|
||||
if(!blood_DNA.len)
|
||||
overlays += blood_overlay
|
||||
|
||||
add_blood_overlay()
|
||||
return TRUE //we applied blood to the item
|
||||
|
||||
/obj/item/proc/add_blood_overlay()
|
||||
if(!blood_DNA.len)
|
||||
return
|
||||
if(GLOB.blood_overlay_cache["[icon]" + icon_state])
|
||||
blood_overlay = GLOB.blood_overlay_cache["[icon]" + icon_state]
|
||||
return
|
||||
if(initial(icon) && initial(icon_state))
|
||||
blood_splatter_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object
|
||||
blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent)
|
||||
blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant
|
||||
blood_splatter_icon.Blend(blood_DNA_to_color(), ICON_MULTIPLY)
|
||||
blood_overlay = image(I)
|
||||
GLOB.blood_overlay_cache["[icon]" + icon_state] = blood_overlay
|
||||
add_overlay(blood_splatter_icon)
|
||||
|
||||
/obj/item/clothing/gloves/add_blood(mob/living/carbon/M)
|
||||
. = ..()
|
||||
|
||||
@@ -1,201 +0,0 @@
|
||||
// The idea is to have 4 bits for coming and 4 for going.
|
||||
#define TRACKS_COMING_NORTH 1
|
||||
#define TRACKS_COMING_SOUTH 2
|
||||
#define TRACKS_COMING_EAST 4
|
||||
#define TRACKS_COMING_WEST 8
|
||||
#define TRACKS_GOING_NORTH 16
|
||||
#define TRACKS_GOING_SOUTH 32
|
||||
#define TRACKS_GOING_EAST 64
|
||||
#define TRACKS_GOING_WEST 128
|
||||
|
||||
// 5 seconds
|
||||
#define TRACKS_CRUSTIFY_TIME 50
|
||||
|
||||
// color-dir-dry
|
||||
var/global/list/image/fluidtrack_cache=list()
|
||||
|
||||
/datum/fluidtrack
|
||||
var/direction=0
|
||||
var/basecolor=BLOOD_COLOR_HUMAN
|
||||
var/wet=0
|
||||
var/fresh=1
|
||||
var/crusty=0
|
||||
var/image/overlay
|
||||
|
||||
/datum/fluidtrack/New(_direction,_color,_wet)
|
||||
src.direction=_direction
|
||||
src.basecolor=_color
|
||||
|
||||
// Footprints, tire trails...
|
||||
/obj/effect/decal/cleanable/blood/tracks
|
||||
amount = 0
|
||||
random_icon_states = null
|
||||
var/dirs=0
|
||||
icon = 'icons/effects/fluidtracks.dmi'
|
||||
icon_state = ""
|
||||
var/coming_state="blood1"
|
||||
var/going_state="blood2"
|
||||
var/updatedtracks=0
|
||||
var/dryname = "dried fluid"
|
||||
var/drydesc = "diguesting dried fluid, where's the janitor?"
|
||||
|
||||
// dir = id in stack
|
||||
var/list/setdirs=list(
|
||||
"1"=0,
|
||||
"2"=0,
|
||||
"4"=0,
|
||||
"8"=0,
|
||||
"16"=0,
|
||||
"32"=0,
|
||||
"64"=0,
|
||||
"128"=0
|
||||
)
|
||||
|
||||
// List of laid tracks and their colors.
|
||||
var/list/datum/fluidtrack/stack=list()
|
||||
|
||||
/**
|
||||
* Add tracks to an existing trail.
|
||||
*
|
||||
* @param DNA bloodDNA to add to collection.
|
||||
* @param comingdir Direction tracks come from, or 0.
|
||||
* @param goingdir Direction tracks are going to (or 0).
|
||||
* @param bloodcolor Color of the blood when wet.
|
||||
*/
|
||||
/obj/effect/decal/cleanable/blood/tracks/proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor=BLOOD_COLOR_HUMAN)
|
||||
var/updated=0
|
||||
// Shift our goingdir 4 spaces to the left so it's in the GOING bitblock.
|
||||
var/realgoing=goingdir<<4
|
||||
|
||||
// Current bit
|
||||
var/b=0
|
||||
|
||||
// When tracks will start to dry out
|
||||
var/t=world.time + TRACKS_CRUSTIFY_TIME
|
||||
var/datum/fluidtrack/track
|
||||
|
||||
// Process 4 bits
|
||||
for(var/bi=0;bi<4;bi++)
|
||||
b=1<<bi
|
||||
// COMING BIT
|
||||
// If setting
|
||||
if(comingdir&b)
|
||||
// If not wet or not set
|
||||
if(dirs&b)
|
||||
var/sid=setdirs["[b]"]
|
||||
track=stack[sid]
|
||||
if(track.wet==t && track.basecolor==bloodcolor)
|
||||
continue
|
||||
// Remove existing stack entry
|
||||
stack.Remove(track)
|
||||
track=new /datum/fluidtrack(b,bloodcolor,t)
|
||||
stack.Add(track)
|
||||
setdirs["[b]"]=stack.Find(track)
|
||||
updatedtracks |= b
|
||||
updated=1
|
||||
|
||||
// GOING BIT (shift up 4)
|
||||
b=b<<4
|
||||
if(realgoing&b)
|
||||
// If not wet or not set
|
||||
if(dirs&b)
|
||||
var/sid=setdirs["[b]"]
|
||||
track=stack[sid]
|
||||
if(track.wet==t && track.basecolor==bloodcolor)
|
||||
continue
|
||||
// Remove existing stack entry
|
||||
stack.Remove(track)
|
||||
track=new /datum/fluidtrack(b,bloodcolor,t)
|
||||
stack.Add(track)
|
||||
setdirs["[b]"]=stack.Find(track)
|
||||
updatedtracks |= b
|
||||
updated=1
|
||||
|
||||
dirs |= comingdir|realgoing
|
||||
if(islist(blood_DNA))
|
||||
blood_DNA |= DNA.Copy()
|
||||
if(updated)
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/update_icon()
|
||||
..()
|
||||
overlays.Cut()
|
||||
color = "#ffffff"
|
||||
var/truedir=0
|
||||
|
||||
// Update ONLY the overlays that have changed.
|
||||
for(var/datum/fluidtrack/track in stack)
|
||||
var/stack_idx=setdirs["[track.direction]"]
|
||||
var/state=coming_state
|
||||
truedir=track.direction
|
||||
if(truedir&240) // Check if we're in the GOING block
|
||||
state=going_state
|
||||
truedir=truedir>>4
|
||||
|
||||
if(track.overlay)
|
||||
track.overlay=null
|
||||
var/image/I = image(icon, icon_state=state, dir=num2dir(truedir))
|
||||
I.color = track.basecolor
|
||||
|
||||
track.fresh=0
|
||||
track.overlay=I
|
||||
stack[stack_idx]=track
|
||||
overlays += I
|
||||
updatedtracks=0 // Clear our memory of updated tracks.
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/shoeprints
|
||||
name = "wet shoeprints"
|
||||
dryname = "dried shoeprints"
|
||||
desc = "They look like still wet tracks left by footwear."
|
||||
drydesc = "They look like dried tracks left by footwear."
|
||||
coming_state = "shoe1"
|
||||
going_state = "shoe2"
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/footprints
|
||||
name = "wet footprints"
|
||||
dryname = "dried footprints"
|
||||
desc = "They look like still wet tracks left by a foot."
|
||||
drydesc = "They look like dried tracks left by a foot."
|
||||
coming_state = "foot1"
|
||||
going_state = "foot2"
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/snake
|
||||
name = "wet tracks"
|
||||
dryname = "dried tracks"
|
||||
desc = "They look like still wet tracks left by a giant snake."
|
||||
drydesc = "They look like dried tracks left by a giant snake."
|
||||
coming_state = "snake1"
|
||||
going_state = "snake2"
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/paw
|
||||
name = "wet tracks"
|
||||
dryname = "dried tracks"
|
||||
desc = "They look like still wet tracks left by a mammal."
|
||||
drydesc = "They look like dried tracks left by a mammal."
|
||||
coming_state = "paw1"
|
||||
going_state = "paw2"
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/claw
|
||||
name = "wet tracks"
|
||||
dryname = "dried tracks"
|
||||
desc = "They look like still wet tracks left by a reptile."
|
||||
drydesc = "They look like dried tracks left by a reptile."
|
||||
coming_state = "claw1"
|
||||
going_state = "claw2"
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/wheels
|
||||
name = "wet tracks"
|
||||
dryname = "dried tracks"
|
||||
desc = "They look like still wet tracks left by wheels."
|
||||
drydesc = "They look like dried tracks left by wheels."
|
||||
coming_state = "wheels"
|
||||
going_state = ""
|
||||
gender = PLURAL
|
||||
|
||||
/obj/effect/decal/cleanable/blood/tracks/body
|
||||
name = "wet trails"
|
||||
dryname = "dried trails"
|
||||
desc = "A still-wet trail left by someone crawling."
|
||||
drydesc = "A dried trail left by someone crawling."
|
||||
coming_state = "trail1"
|
||||
going_state = "trail2"
|
||||
@@ -1,158 +1,35 @@
|
||||
#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var)
|
||||
#define BLOOD_SIZE_SMALL 1
|
||||
#define BLOOD_SIZE_MEDIUM 2
|
||||
#define BLOOD_SIZE_BIG 3
|
||||
#define BLOOD_SIZE_NO_MERGE -1
|
||||
|
||||
var/global/list/image/splatter_cache=list()
|
||||
|
||||
/obj/effect/decal/cleanable/blood
|
||||
name = "blood"
|
||||
desc = "It's thick and gooey. Perhaps it's the chef's cooking?"
|
||||
gender = PLURAL
|
||||
desc = "It's gooey. Perhaps it's the chef's cooking?"
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "mfloor1"
|
||||
icon_state = "floor1"
|
||||
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
|
||||
blood_DNA = list()
|
||||
generic_filth = TRUE
|
||||
persistent = TRUE
|
||||
appearance_flags = NO_CLIENT_COLOR
|
||||
var/base_icon = 'icons/effects/blood.dmi'
|
||||
var/list/viruses = list()
|
||||
var/basecolor=BLOOD_COLOR_HUMAN // Color when wet.
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
var/amount = 5
|
||||
var/drytime
|
||||
var/dryname = "dried blood"
|
||||
var/drydesc = "It's dry and crusty. Someone is not doing their job."
|
||||
var/blood_size = BLOOD_SIZE_MEDIUM // A relative size; larger-sized blood will not override smaller-sized blood, except maybe at mapload.
|
||||
blood_state = BLOOD_STATE_BLOOD
|
||||
color = BLOOD_COLOR_HUMAN //default so we don't have white splotches everywhere.
|
||||
bloodiness = BLOOD_AMOUNT_PER_DECAL
|
||||
|
||||
/obj/effect/decal/cleanable/blood/clean_blood()
|
||||
fluorescent = 0
|
||||
if(invisibility != 100)
|
||||
set_invisibility(100)
|
||||
amount = 0
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
..(ignore=1)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/hide()
|
||||
return
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Initialize(mapload)
|
||||
. = ..()
|
||||
if(merge_with_blood(!mapload))
|
||||
return INITIALIZE_HINT_QDEL
|
||||
start_drying()
|
||||
|
||||
// Returns true if overriden and needs deletion. If the argument is false, we will merge into any existing blood.
|
||||
/obj/effect/decal/cleanable/blood/proc/merge_with_blood(var/override = TRUE)
|
||||
. = FALSE
|
||||
if(blood_size == BLOOD_SIZE_NO_MERGE)
|
||||
return
|
||||
if(isturf(loc))
|
||||
for(var/obj/effect/decal/cleanable/blood/B in loc)
|
||||
if(B == src)
|
||||
continue
|
||||
if(B.blood_size == BLOOD_SIZE_NO_MERGE)
|
||||
continue
|
||||
if(override && blood_size >= B.blood_size)
|
||||
if (B.blood_DNA)
|
||||
blood_DNA |= B.blood_DNA.Copy()
|
||||
qdel(B)
|
||||
continue
|
||||
if(B.blood_DNA)
|
||||
B.blood_DNA |= blood_DNA.Copy()
|
||||
. = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/proc/start_drying()
|
||||
drytime = world.time + DRYING_TIME * (amount+1)
|
||||
/obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C)
|
||||
if (C.blood_DNA)
|
||||
blood_DNA |= C.blood_DNA.Copy()
|
||||
update_icon()
|
||||
START_PROCESSING(SSobj, src)
|
||||
..()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Process()
|
||||
if(world.time > drytime)
|
||||
dry()
|
||||
/obj/effect/decal/cleanable/blood/transfer_blood_dna()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/on_update_icon()
|
||||
if(basecolor == "rainbow") basecolor = get_random_colour(1)
|
||||
color = basecolor
|
||||
if(basecolor == SYNTH_BLOOD_COLOUR)
|
||||
SetName("oil")
|
||||
desc = "It's black and greasy."
|
||||
else
|
||||
SetName(initial(name))
|
||||
desc = initial(desc)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/Crossed(mob/living/carbon/human/perp)
|
||||
if (!istype(perp))
|
||||
return
|
||||
if(amount < 1)
|
||||
return
|
||||
|
||||
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(perp.shoes && !perp.buckled)//Adding blood to shoes
|
||||
var/obj/item/clothing/shoes/S = perp.shoes
|
||||
if(istype(S))
|
||||
S.blood_color = basecolor
|
||||
S.track_blood = max(amount,S.track_blood)
|
||||
if(!S.blood_overlay)
|
||||
S.add_blood_overlay()
|
||||
if(!S.blood_DNA)
|
||||
S.blood_DNA = list()
|
||||
S.blood_overlay.color = basecolor
|
||||
S.overlays += S.blood_overlay
|
||||
if(S.blood_overlay && S.blood_overlay.color != basecolor)
|
||||
S.blood_overlay.color = basecolor
|
||||
S.overlays.Cut()
|
||||
S.overlays += S.blood_overlay
|
||||
S.blood_DNA |= blood_DNA.Copy()
|
||||
|
||||
else if (hasfeet)//Or feet
|
||||
perp.feet_blood_color = basecolor
|
||||
perp.track_blood = max(amount,perp.track_blood)
|
||||
if(!perp.feet_blood_DNA)
|
||||
perp.feet_blood_DNA = list()
|
||||
perp.feet_blood_DNA |= blood_DNA.Copy()
|
||||
else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair))
|
||||
var/obj/structure/bed/chair/wheelchair/W = perp.buckled
|
||||
W.bloodiness = 4
|
||||
|
||||
perp.update_inv_shoes(1)
|
||||
amount--
|
||||
|
||||
/obj/effect/decal/cleanable/blood/proc/dry()
|
||||
name = dryname
|
||||
desc = drydesc
|
||||
color = adjust_brightness(color, -50)
|
||||
amount = 0
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
/obj/effect/decal/cleanable/blood/transfer_mob_blood_dna()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/update_icon()
|
||||
color = blood_DNA_to_color()
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user)
|
||||
..()
|
||||
if (amount && istype(user))
|
||||
if (user.gloves)
|
||||
return
|
||||
var/taken = rand(1,amount)
|
||||
amount -= taken
|
||||
to_chat(user, "<span class='notice'>You get some of \the [src] on your hands.</span>")
|
||||
if (!user.blood_DNA)
|
||||
user.blood_DNA = list()
|
||||
user.blood_DNA |= blood_DNA.Copy()
|
||||
user.bloody_hands = taken
|
||||
user.hand_blood_color = basecolor
|
||||
user.update_inv_gloves(1)
|
||||
//obj/effect/decal/cleanable/blood/update_color()
|
||||
// if(SEND_SIGNAL(COMSIG_BLOOD_COLOR) & COMPONENT_BLOCK_UPDATE_COLOR)
|
||||
// return
|
||||
|
||||
/obj/effect/decal/cleanable/blood/old
|
||||
name = "dried blood"
|
||||
@@ -167,273 +44,169 @@ var/global/list/image/splatter_cache=list()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/splatter
|
||||
random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5")
|
||||
amount = 2
|
||||
blood_size = BLOOD_SIZE_BIG
|
||||
|
||||
/obj/effect/decal/cleanable/trail_holder //not a child of blood on purpose so that it shows up even on regular splatters
|
||||
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()
|
||||
color = BLOOD_COLOR_HUMAN
|
||||
bloodiness = BLOOD_AMOUNT_PER_DECAL
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs
|
||||
name = "gibs"
|
||||
desc = "They look bloody and gruesome."
|
||||
icon_state = "gibbl5"
|
||||
layer = LOW_OBJ_LAYER
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
|
||||
blood_size = BLOOD_SIZE_NO_MERGE
|
||||
var/gib_overlay = FALSE
|
||||
var/slimy_gibs = FALSE
|
||||
var/body_colors = "#ffffff"
|
||||
/obj/effect/decal/cleanable/trail_holder/update_icon()
|
||||
color = blood_DNA_to_color()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/proc/update_icon()
|
||||
var/image/giblets = new(base_icon, icon_state+ "-overlay", dir)
|
||||
var/image/giblets2 = new(base_icon, icon_state + "c-overlay", dir)
|
||||
giblets.color = body_colors
|
||||
|
||||
var/icon/blood = new(base_icon,"[icon_state]",dir)
|
||||
if(basecolor == "rainbow") basecolor = get_random_colour(1)
|
||||
blood.Blend(basecolor,ICON_MULTIPLY)
|
||||
|
||||
icon = blood
|
||||
overlays.Cut()
|
||||
if(gib_overlay)
|
||||
if(!slimy_gibs)
|
||||
add_overlay(giblets)
|
||||
else
|
||||
add_overlay(giblets)
|
||||
add_overlay(giblets2)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target)
|
||||
return
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/Crossed(mob/living/L)
|
||||
if(istype(L) && has_gravity(loc))
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.mind.assigned_role == "Detective") //Gumshoe perks yo
|
||||
playsound(loc, 'sound/effects/gib_step.ogg', 10, 1)
|
||||
else
|
||||
playsound(loc, 'sound/effects/gib_step.ogg', H.has_trait(TRAIT_LIGHT_STEP) ? 20 : 50, 1)
|
||||
else
|
||||
playsound(loc, 'sound/effects/gib_step.ogg', L.has_trait(TRAIT_LIGHT_STEP) ? 20 : 50, 1)
|
||||
/obj/effect/cleanable/trail_holder/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions)
|
||||
spawn (0)
|
||||
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(loc)
|
||||
b.basecolor = src.basecolor
|
||||
b.update_icon()
|
||||
if (step_to(src, get_step(src, direction), 0))
|
||||
break
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/start_drying()
|
||||
return
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/merge_with_blood()
|
||||
return FALSE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/up
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
|
||||
gib_overlay = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/down
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1")
|
||||
gib_overlay = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/body
|
||||
random_icon_states = list("gibhead", "gibtorso")
|
||||
gib_overlay = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/torso
|
||||
random_icon_states = list("gibtorso")
|
||||
gib_overlay = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/limb
|
||||
random_icon_states = list("gibleg", "gibarm")
|
||||
gib_overlay = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/core
|
||||
random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
|
||||
gib_overlay = TRUE
|
||||
|
||||
/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"
|
||||
add_blood(list("Non-human DNA" = "A+"))
|
||||
|
||||
/obj/effect/decal/cleanable/blood/drip
|
||||
name = "drips of blood"
|
||||
desc = "It's gooey."
|
||||
gender = PLURAL
|
||||
icon_state = "1"
|
||||
random_icon_states = list("drip1","drip2","drip3","drip4","drip5")
|
||||
amount = 0
|
||||
var/list/drips
|
||||
blood_size = BLOOD_SIZE_SMALL
|
||||
|
||||
/obj/effect/decal/cleanable/blood/drip/Initialize()
|
||||
. = ..()
|
||||
drips = list(icon_state)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/drip/can_bloodcrawl_in()
|
||||
/obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in()
|
||||
return TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/human
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/human/Initialize(mapload, list/datum/disease/diseases)
|
||||
. = ..()
|
||||
reagents.add_reagent("liquidgibs", 5)
|
||||
guts()
|
||||
/obj/effect/decal/cleanable/trail_holder/transfer_blood_dna()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/human/up
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/human/down
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/human/body
|
||||
random_icon_states = list("gibhead", "gibtorso")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/human/torso
|
||||
random_icon_states = list("gibtorso")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/human/limb
|
||||
random_icon_states = list("gibleg", "gibarm")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/human/core
|
||||
random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
|
||||
// Slime Gibs
|
||||
/obj/effect/decal/cleanable/blood/gibs/slime
|
||||
desc = "They look gooey and gruesome."
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/slime/Initialize(mapload, list/datum/disease/diseases)
|
||||
/obj/effect/decal/cleanable/trail_holder/transfer_mob_blood_dna()
|
||||
. = ..()
|
||||
reagents.add_reagent("liquidslimegibs", 5)
|
||||
update_icon()
|
||||
guts()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/slime/up
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
//BLOODY FOOTPRINTS
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks
|
||||
name = "tracks"
|
||||
icon = 'icons/effects/fluidtracks.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_BLOOD //the icon state to load images from
|
||||
var/print_state = FOOTPRINT_SHOE //the print state for different feet
|
||||
var/list/shoe_types = list()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/slime/down
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/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.blood_smear[blood_state])
|
||||
if(color != bloodtype_to_color(S.last_bloodtype))
|
||||
return
|
||||
S.blood_smear[blood_state] = max(S.blood_smear[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/gibs/slime/body
|
||||
random_icon_states = list("gibhead", "gibtorso")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
else if(H && H.blood_smear[blood_state])
|
||||
if(color != bloodtype_to_color(H.last_bloodtype))
|
||||
return
|
||||
H.blood_smear[blood_state] = max(H.blood_smear[blood_state] - BLOOD_LOSS_PER_STEP, 0)
|
||||
if (!(entered_dirs & H.dir))
|
||||
entered_dirs |= H.dir
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/slime/torso
|
||||
random_icon_states = list("gibtorso")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/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.blood_smear[blood_state])
|
||||
if(color != bloodtype_to_color(S.last_bloodtype))//last entry - we check its color
|
||||
return
|
||||
S.blood_smear[blood_state] = max(S.blood_smear[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/gibs/slime/limb
|
||||
random_icon_states = list("gibleg", "gibarm")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
else if(H && H.blood_smear[blood_state])
|
||||
if(color != bloodtype_to_color(H.last_bloodtype))//last entry - we check its color
|
||||
return
|
||||
H.blood_smear[blood_state] = max(H.blood_smear[blood_state] - BLOOD_LOSS_PER_STEP, 0)
|
||||
if (!(exited_dirs & H.dir))
|
||||
exited_dirs |= H.dir
|
||||
update_icon()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/slime/core
|
||||
random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/update_icon()
|
||||
..()
|
||||
cut_overlays()
|
||||
to_chat(world, "[src] called update_icon with [print_state]")
|
||||
for(var/Ddir in GLOB.cardinals)
|
||||
if(entered_dirs & Ddir)
|
||||
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[print_state]-[Ddir]"]
|
||||
if(!bloodstep_overlay)
|
||||
GLOB.bloody_footprints_cache["entered-[print_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[print_state]1", dir = Ddir)
|
||||
add_overlay(bloodstep_overlay)
|
||||
if(exited_dirs & Ddir)
|
||||
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[print_state]-[Ddir]"]
|
||||
if(!bloodstep_overlay)
|
||||
GLOB.bloody_footprints_cache["exited-[print_state]-[Ddir]"] = bloodstep_overlay = image(icon, "[print_state]2", dir = Ddir)
|
||||
add_overlay(bloodstep_overlay)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/synth
|
||||
desc = "They look sludgy and disgusting."
|
||||
alpha = BLOODY_FOOTPRINT_BASE_ALPHA + bloodiness
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/synth/Initialize(mapload, list/datum/disease/diseases)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/examine(mob/user)
|
||||
. = ..()
|
||||
reagents.add_reagent("liquidsyntheticgibs", 5)
|
||||
update_icon()
|
||||
guts()
|
||||
if(shoe_types.len && ishuman(user) && user.mind.assigned_role == "Detective") //gumshoe does the detective thing, not every fucking assistant
|
||||
. += "You recognise the footprints as belonging to:\n"
|
||||
for(var/shoe in shoe_types)
|
||||
var/obj/item/clothing/shoes/S = shoe
|
||||
. += "some <B>[initial(S.name)]</B> [icon2html(initial(S.icon), user)]\n"
|
||||
|
||||
//IPCs
|
||||
/obj/effect/decal/cleanable/blood/gibs/ipc
|
||||
desc = "They look sharp yet oozing."
|
||||
to_chat(user, .)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/ipc/Initialize(mapload, list/datum/disease/diseases)
|
||||
. = ..()
|
||||
reagents.add_reagent("liquidoilgibs", 5)
|
||||
update_icon()
|
||||
guts()
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/replace_decal(obj/effect/decal/cleanable/blood/footprints/tracks/C)
|
||||
if(print_state != C.print_state) //We only replace footprints of the same type as us
|
||||
return
|
||||
if(color != C.color)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/ipc/guts()
|
||||
if(gib_overlay)
|
||||
var/mutable_appearance/gibz = mutable_appearance(icon, icon_state + "-ipcoverlay", color = blood_color, layer = -LOW_OBJ_LAYER)
|
||||
var/mutable_appearance/gibz2 = mutable_appearance(icon, icon_state + "c-ipcoverlay", color = body_colors, layer = -LOW_OBJ_LAYER)
|
||||
if(!slimy_gibs)
|
||||
gibz.appearance_flags = RESET_COLOR
|
||||
add_overlay(gibz)
|
||||
else
|
||||
gibz.appearance_flags = RESET_COLOR
|
||||
add_overlay(gibz)
|
||||
add_overlay(gibz2)
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/can_bloodcrawl_in()
|
||||
if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/ipc/up
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/shoe
|
||||
name = "footprints"
|
||||
desc = "They look like tracks left by footwear."
|
||||
icon_state = FOOTPRINT_SHOE
|
||||
print_state = FOOTPRINT_SHOE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/ipc/down
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibdown1","gibdown1","gibdown1")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/foot
|
||||
name = "footprints"
|
||||
desc = "They look like tracks left by a bare foot."
|
||||
icon_state = FOOTPRINT_FOOT
|
||||
print_state = FOOTPRINT_FOOT
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/ipc/body
|
||||
random_icon_states = list("gibhead", "gibtorso")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/snake
|
||||
name = "tracks"
|
||||
desc = "They look like tracks left by a giant snake."
|
||||
icon_state = FOOTPRINT_SNAKE
|
||||
print_state = FOOTPRINT_SNAKE
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/ipc/torso
|
||||
random_icon_states = list("gibtorso")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/paw
|
||||
name = "footprints"
|
||||
desc = "They look like tracks left by paws."
|
||||
icon_state = FOOTPRINT_PAW
|
||||
print_state = FOOTPRINT_PAW
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/ipc/limb
|
||||
random_icon_states = list("gibleg", "gibarm")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/claw
|
||||
name = "footprints"
|
||||
desc = "They look like tracks left by claws."
|
||||
icon_state = FOOTPRINT_CLAW
|
||||
print_state = FOOTPRINT_CLAW
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/ipc/core
|
||||
random_icon_states = list("gibmid1", "gibmid2", "gibmid3")
|
||||
gib_overlay = TRUE
|
||||
slimy_gibs = TRUE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/wheels
|
||||
name = "tracks"
|
||||
desc = "They look like tracks left by wheels."
|
||||
gender = PLURAL
|
||||
icon_state = FOOTPRINT_WHEEL
|
||||
print_state = FOOTPRINT_WHEEL
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/synth
|
||||
desc = "They look sludgy and disgusting."
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/synth/Initialize(mapload, list/datum/disease/diseases)
|
||||
. = ..()
|
||||
reagents.add_reagent("liquidsyntheticgibs", 5)
|
||||
update_icon()
|
||||
guts()
|
||||
|
||||
#undef BLOOD_SIZE_SMALL
|
||||
#undef BLOOD_SIZE_MEDIUM
|
||||
#undef BLOOD_SIZE_BIG
|
||||
#undef BLOOD_SIZE_NO_MERGE
|
||||
/obj/effect/decal/cleanable/blood/footprints/tracks/body
|
||||
name = "trails"
|
||||
desc = "A trail left by something being dragged."
|
||||
icon_state = FOOTPRINT_DRAG
|
||||
print_state = FOOTPRINT_DRAG
|
||||
|
||||
Reference in New Issue
Block a user