I think I got it.

Also gibs should be better too.
This commit is contained in:
Poojawa
2019-05-12 04:06:35 -05:00
parent fcdc748bf1
commit 1a047c0068
18 changed files with 94 additions and 132 deletions
+2 -31
View File
@@ -5,7 +5,7 @@
var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA
var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints
var/mergeable_decal = TRUE //when two of these are on a same tile or do we need to merge them into just one?
var/blood_color = BLOOD_COLOR_HUMAN
var/blood_color
/obj/effect/decal/cleanable/Initialize(mapload, list/datum/disease/diseases)
. = ..()
@@ -75,14 +75,6 @@
var/mob/living/carbon/human/H = O
if(H.shoes && blood_state && bloodiness && (!H.has_trait(TRAIT_LIGHT_STEP) || !H.mind.assigned_role == "Detective"))
var/obj/item/clothing/shoes/S = H.shoes
for(var/datum/reagent/R in reagents.reagent_list)
// Get blood data from the blood reagent.
if(istype(R, /datum/reagent/blood))
if(R.data["blood_type"])
S.blood_list_checks(src, R.data["blood_type"])
else if(istype(R, /datum/reagent/liquidgibs))
if(R.data["blood_type"])
S.blood_list_checks(src, R.data["blood_type"])
var/add_blood = 0
if(bloodiness >= BLOOD_GAIN_PER_STEP)
add_blood = BLOOD_GAIN_PER_STEP
@@ -96,29 +88,8 @@
H.update_inv_shoes()
else if(H.bloodiness && blood_state && bloodiness && (!H.has_trait(TRAIT_LIGHT_STEP) || !H.mind.assigned_role == "Detective"))
for(var/datum/reagent/R in reagents.reagent_list)
// Get blood data from the blood reagent.
if(istype(R, /datum/reagent/blood))
if(R.data["blood_type"])
H.blood_list_checks(src, R.data["blood_type"])
else if(istype(R, /datum/reagent/liquidgibs))
if(R.data["blood_type"])
H.blood_list_checks(src, R.data["blood_type"])
var/add_blood = 0
if(H.bloodiness >= BLOOD_GAIN_PER_STEP)
add_blood = BLOOD_GAIN_PER_STEP
else
add_blood = bloodiness
bloodiness -= add_blood
H.blood_smear[blood_state] = min(MAX_SHOE_BLOODINESS,H.blood_smear[blood_state]+add_blood)
H.add_blood_DNA(return_blood_DNA())
H.blood_state = blood_state
update_icon()
else
color = blood_DNA_to_color()
var/add_blood = 0
if(bloodiness >= BLOOD_GAIN_PER_STEP)
if(H.bloodiness >= BLOOD_GAIN_PER_STEP)
add_blood = BLOOD_GAIN_PER_STEP
else
add_blood = bloodiness
@@ -7,8 +7,7 @@
/obj/effect/decal/cleanable/blood/xeno/Initialize()
. = ..()
if(!data)
data = add_blood_DNA(list("donor"= "UNKNOWN DNA","bloodcolor" = BLOOD_COLOR_XENO, "blood_type"= "X*"))
add_blood_DNA(list("UNKNOWN DNA" = "X*"))
/obj/effect/decal/cleanable/blood/splatter/xeno
color = BLOOD_COLOR_XENO
@@ -65,5 +64,4 @@
/obj/effect/decal/cleanable/blood/xeno/tracks/Initialize()
. = ..()
if(!data)
data = add_blood_DNA(list("UNKNOWN DNA" = "X*"))
add_blood_DNA(list("UNKNOWN DNA" = "X*"))
@@ -7,13 +7,16 @@
mergeable_decal = FALSE
var/gib_overlay = FALSE
var/slimy_gibs = FALSE
var/body_colors
/obj/effect/decal/cleanable/blood/gibs/proc/guts()
if(gib_overlay)
var/mutable_appearance/gibz = mutable_appearance(icon, icon_state + "-overlay")
var/mutable_appearance/gibz2 = mutable_appearance(icon, icon_state + "c-overlay", color = body_colors)
if(!slimy_gibs)
gibz.appearance_flags = RESET_COLOR
add_overlay(gibz)
add_overlay(gibz2)
/obj/effect/decal/cleanable/blood/gibs/ex_act(severity, target)
return
@@ -98,26 +101,32 @@
/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
@@ -5,13 +5,14 @@
icon_state = "floor1"
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
blood_state = BLOOD_STATE_BLOOD
color = BLOOD_COLOR_HUMAN
color = BLOOD_COLOR_HUMAN //default so we don't have white splotches everywhere.
bloodiness = BLOOD_AMOUNT_PER_DECAL
var/data = ""
/obj/effect/decal/cleanable/blood/old/Initialize(mapload, list/datum/disease/diseases)
. = ..()
update_icon()
/obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C)
if(!data)
C.data = add_blood_DNA(return_blood_DNA())
if(bloodiness)
if(C.bloodiness < MAX_SHOE_BLOODINESS)
C.bloodiness += bloodiness
@@ -19,7 +20,6 @@
return ..()
obj/effect/decal/cleanable/blood/add_blood_DNA(list/blood_dna)
blood_list_checks(src, data["blood_type"])
return TRUE
/obj/effect/decal/cleanable/blood/transfer_mob_blood_dna()
@@ -27,16 +27,10 @@ obj/effect/decal/cleanable/blood/add_blood_DNA(list/blood_dna)
update_icon()
/obj/effect/decal/cleanable/blood/update_icon()
for(var/datum/reagent/R in reagents.reagent_list)
// Get blood data from the blood reagent.
if(istype(R, /datum/reagent/blood))
if(R.data["blood_type"])
blood_list_checks(src, R.data["blood_type"])
blood_color = blood_DNA_to_color(blood_mix_types)
else if(istype(R, /datum/reagent/liquidgibs))
if(R.data["blood_type"])
blood_list_checks(src, R.data["blood_type"])
blood_color = blood_DNA_to_color(blood_mix_types)
GET_COMPONENT(D, /datum/component/forensics)
if(!blood_color)
blood_color = D.blood_mix_color
color = blood_color
/obj/effect/decal/cleanable/blood/old
name = "dried blood"
@@ -57,24 +51,12 @@ obj/effect/decal/cleanable/blood/add_blood_DNA(list/blood_dna)
desc = "Your instincts say you shouldn't be following these."
random_icon_states = null
var/list/existing_dirs = list()
blood_state = BLOOD_STATE_BLOOD
color = BLOOD_COLOR_HUMAN
bloodiness = BLOOD_AMOUNT_PER_DECAL
var/data = ""
/obj/effect/decal/cleanable/trail_holder/update_icon()
for(var/datum/reagent/R in reagents.reagent_list)
// Get blood data from the blood reagent.
if(istype(R, /datum/reagent/blood))
if(R.data["blood_type"])
blood_list_checks(src, R.data["blood_type"])
color = blood_DNA_to_color(blood_mix_types)
else if(istype(R, /datum/reagent/liquidgibs))
if(R.data["blood_type"])
blood_list_checks(src, R.data["blood_type"])
color = blood_DNA_to_color(blood_mix_types)
else
color = blood_DNA_to_color()
GET_COMPONENT(D, /datum/component/forensics)
color = D.blood_mix_color
/obj/effect/cleanable/trail_holder/Initialize()
. = ..()
@@ -105,7 +87,6 @@ obj/effect/decal/cleanable/blood/add_blood_DNA(list/blood_dna)
var/mob/living/carbon/human/H = O
var/obj/item/clothing/shoes/S = H.shoes
if(S && S.blood_smear[blood_state])
S.blood_list_checks(S, data["blood_type"])
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))
@@ -113,8 +94,8 @@ obj/effect/decal/cleanable/blood/add_blood_DNA(list/blood_dna)
update_icon()
else if(!H.bloodiness)
H.blood_smear[blood_state] = max(S.blood_smear[blood_state] - BLOOD_LOSS_PER_STEP, 0)
H.bloodiness = max(H.bloodiness - BLOOD_LOSS_IN_SPREAD, 0)
H.blood_list_checks(H, data["blood_type"])
if (!(entered_dirs & H.dir))
entered_dirs |= H.dir
update_icon()
@@ -126,7 +107,6 @@ obj/effect/decal/cleanable/blood/add_blood_DNA(list/blood_dna)
var/mob/living/carbon/human/H = O
var/obj/item/clothing/shoes/S = H.shoes
if(S && S.blood_smear[blood_state])
S.blood_list_checks(S, data["blood_type"])
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))
@@ -134,29 +114,30 @@ obj/effect/decal/cleanable/blood/add_blood_DNA(list/blood_dna)
update_icon()
else if(!H.bloodiness)
H.blood_smear[blood_state] = max(H.blood_smear[blood_state] - BLOOD_LOSS_PER_STEP, 0)
H.bloodiness = max(H.bloodiness - BLOOD_LOSS_IN_SPREAD, 0)
H.blood_list_checks(H, data["blood_type"])
if (!(exited_dirs & H.dir))
exited_dirs |= H.dir
update_icon()
/obj/effect/decal/cleanable/blood/footprints/tracks/update_icon()
..()
cut_overlays()
for(var/Ddir in GLOB.cardinals)
GET_COMPONENT(B, /datum/component/forensics)
if(entered_dirs & Ddir)
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["entered-[print_state]-[Ddir]-[color]"]
if(!bloodstep_overlay)
GLOB.bloody_footprints_cache["entered-[print_state]-[Ddir]-[color]"] = bloodstep_overlay = image(icon, "[print_state]1", dir = Ddir)
GLOB.bloody_footprints_cache["entered-[print_state]-[Ddir]-[color]"] = bloodstep_overlay = image(icon, "[print_state]1", dir = Ddir, color = B.blood_mix_color)
add_overlay(bloodstep_overlay)
if(exited_dirs & Ddir)
var/image/bloodstep_overlay = GLOB.bloody_footprints_cache["exited-[print_state]-[Ddir]-[color]"]
if(!bloodstep_overlay)
GLOB.bloody_footprints_cache["exited-[print_state]-[Ddir]-[color]"] = bloodstep_overlay = image(icon, "[print_state]2", dir = Ddir)
GLOB.bloody_footprints_cache["exited-[print_state]-[Ddir]-[color]"] = bloodstep_overlay = image(icon, "[print_state]2", dir = Ddir, color = B.blood_mix_color)
add_overlay(bloodstep_overlay)
alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness
color = blood_DNA_to_color(blood_mix_types)
alpha = BLOODY_FOOTPRINT_BASE_ALPHA + bloodiness
/obj/effect/decal/cleanable/blood/footprints/tracks/examine(mob/user)
. = ..()
@@ -33,29 +33,27 @@
var/list/dna_to_add //find the dna to pass to the spawned gibs. do note this can be null if the mob doesn't have blood. add_blood_DNA() has built in null handling.
to_chat(world, "Attempting to add DNA to pass to gibs")
var/body_coloring
if(source_mob)
to_chat(world, "We got a source mob, [source_mob]")
dna_to_add = source_mob.get_blood_dna_list() //ez pz
if(ishuman(source_mob))
var/mob/living/carbon/human/H = source_mob
if(H.dna.species.use_skintones)
body_coloring = skintone2hex(H.skin_tone)
else
body_coloring = "#[H.dna.features["mcolor"]]"
else if(gib_mob_type)
to_chat(world, "We got a mob type, [gib_mob_type]")
var/mob/living/temp_mob = new gib_mob_type(src) //generate a fake mob so that we pull the right type of DNA for the gibs.
if(gib_mob_species)
to_chat(world, "We got a mob species too, [gib_mob_species]")
if(ishuman(temp_mob))
to_chat(world, "it's a human type mob for sure")
var/mob/living/carbon/human/H = temp_mob
H.set_species(gib_mob_species)
if(isjellyperson(H))
H.dna.blood_type = "GEL"
if(isipcperson(H))
H.dna.blood_type = "HF"
if(isxenoperson(H))
H.dna.blood_type = "X*"
if(islizard(H))
H.dna.blood_type = "L"
to_chat(world, "temp_mob is a [H.dna.species]")
dna_to_add = temp_mob.get_blood_dna_list()
if(H.dna.species.use_skintones)
body_coloring = skintone2hex(H.skin_tone)
else
body_coloring = "#[H.dna.features["mcolor"]]"
qdel(H)
else
dna_to_add = temp_mob.get_blood_dna_list()
@@ -78,6 +76,7 @@
gib.add_blood_DNA(dna_to_add)
// color them properly, please.
gib.body_colors = body_coloring
gib.update_icon()
var/list/directions = gibdirections[i]