Blood colors happens to footprints now.
Different prints not working. splatter effect not working, I'm just sick of looking at this right now.
This commit is contained in:
@@ -41,7 +41,6 @@
|
||||
var/dynamic_hair_suffix = ""//head > mask for head hair
|
||||
var/dynamic_fhair_suffix = ""//mask > head for facial hair
|
||||
|
||||
var/blood_color = BLOOD_COLOR_HUMAN
|
||||
var/blood_state = BLOOD_STATE_NOT_BLOODY
|
||||
var/list/blood_smear = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
var/adjusted = NORMAL_STYLE
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
|
||||
var/move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/shoe
|
||||
|
||||
/obj/item/clothing/shoes/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT = CALLBACK(src, .proc/clean_blood)))
|
||||
|
||||
@@ -25,6 +25,16 @@
|
||||
if(D)
|
||||
. = D.fibers
|
||||
|
||||
/atom/proc/return_blood_mix_types()
|
||||
GET_COMPONENT(D, /datum/component/forensics)
|
||||
if(D)
|
||||
. = D.blood_mix_types
|
||||
|
||||
/atom/proc/return_blood_mix_color()
|
||||
GET_COMPONENT(D, /datum/component/forensics)
|
||||
if(D)
|
||||
. = D.blood_mix_color
|
||||
|
||||
/atom/proc/add_fingerprint_list(list/fingerprints) //ASSOC LIST FINGERPRINT = FINGERPRINT
|
||||
if(length(fingerprints))
|
||||
. = AddComponent(/datum/component/forensics, fingerprints)
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
var/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding
|
||||
|
||||
var/bloodiness = 0
|
||||
var/bloodinessmax = 5
|
||||
var/blood_state = BLOOD_STATE_NOT_BLOODY
|
||||
var/list/blood_smear = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
|
||||
var/blood_color //For blood smearing stuff
|
||||
|
||||
@@ -46,110 +46,61 @@
|
||||
for(var/datum/mutation/human/HM in dna.mutations)
|
||||
HM.on_move(src, NewLoc)
|
||||
|
||||
if(shoes)
|
||||
if(!lying && !buckled)
|
||||
if(loc == NewLoc)
|
||||
if(!has_gravity(loc))
|
||||
return
|
||||
var/obj/item/clothing/shoes/S = shoes
|
||||
|
||||
//Bloody footprints
|
||||
var/turf/T = get_turf(src)
|
||||
if(S.blood_smear && S.blood_smear[S.blood_state])
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints/tracks) in T
|
||||
if(oldFP && (oldFP.blood_state == S.blood_state && oldFP.color == color))
|
||||
return
|
||||
S.blood_smear[S.blood_state] = max(0, S.blood_smear[S.blood_state]-BLOOD_LOSS_PER_STEP)
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints/tracks/footprints(T)
|
||||
FP.icon_state = FOOTPRINT_SHOE
|
||||
FP.print_state = FOOTPRINT_SHOE
|
||||
FP.blood_state = S.blood_state
|
||||
FP.blood_color = S.blood_color
|
||||
FP.entered_dirs |= dir
|
||||
FP.bloodiness = S.blood_smear[S.blood_state]
|
||||
FP.update_icon()
|
||||
update_inv_shoes()
|
||||
//End bloody footprints
|
||||
|
||||
S.step_action()
|
||||
|
||||
else
|
||||
if(!buckled)
|
||||
if(!buckled)
|
||||
if(shoes)
|
||||
if(!lying)
|
||||
if(loc == NewLoc)
|
||||
if(!has_gravity(loc))
|
||||
return
|
||||
var/obj/item/clothing/shoes/S = shoes
|
||||
//Bloody footprints
|
||||
var/turf/T = get_turf(src)
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(H.bloodiness)
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints/tracks) in T
|
||||
if(oldFP && (oldFP.blood_state == blood_state && oldFP.color == color))
|
||||
if(S.blood_smear && S.blood_smear[S.blood_state])
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/shoe/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints/tracks/shoe) in T
|
||||
if(oldFP && (oldFP.blood_state == S.blood_state && oldFP.color == S.blood_color))
|
||||
return
|
||||
else
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/FP = new /obj/effect/decal/cleanable/blood/footprints/tracks(T)
|
||||
if(DIGITIGRADE in dna.species.species_traits)
|
||||
if(dna.species.id == ("lizard" || "ashwalker" || "xeno"))
|
||||
FP.icon_state = FOOTPRINT_CLAW
|
||||
FP.print_state = FOOTPRINT_CLAW
|
||||
else if(dna.species.id == "Mammal")
|
||||
FP.icon_state = FOOTPRINT_PAW
|
||||
FP.print_state = FOOTPRINT_PAW
|
||||
else
|
||||
FP.icon_state = FOOTPRINT_SHOE
|
||||
FP.print_state = FOOTPRINT_SHOE
|
||||
else if(("taur" in dna.species.mutant_bodyparts) && (dna.features["taur"] != "None"))
|
||||
if(dna.features["taur"] in GLOB.noodle_taurs)
|
||||
FP.icon_state = FOOTPRINT_SNAKE
|
||||
FP.print_state = FOOTPRINT_SNAKE
|
||||
else if(dna.features["taur"] in GLOB.paw_taurs)
|
||||
FP.icon_state = FOOTPRINT_PAW
|
||||
FP.print_state = FOOTPRINT_PAW
|
||||
else
|
||||
FP.icon_state = FOOTPRINT_SHOE
|
||||
FP.print_state = FOOTPRINT_SHOE
|
||||
FP.add_blood_DNA(return_blood_DNA())
|
||||
FP.blood_color = H.blood_color
|
||||
FP.update_icon()
|
||||
var/newdir = get_dir(T, loc)
|
||||
if(newdir == dir)
|
||||
FP.setDir(newdir)
|
||||
else
|
||||
newdir = newdir | dir
|
||||
if(newdir == 3)
|
||||
newdir = 1
|
||||
else if(newdir == 12)
|
||||
newdir = 4
|
||||
FP.setDir(newdir)
|
||||
bloodiness--
|
||||
S.blood_smear[S.blood_state] = max(0, S.blood_smear[S.blood_state]-BLOOD_LOSS_PER_STEP)
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/shoe/FP = new /obj/effect/decal/cleanable/blood/footprints/tracks/shoe(T)
|
||||
FP.icon_state = FOOTPRINT_SHOE
|
||||
FP.print_state = FOOTPRINT_SHOE
|
||||
FP.blood_state = S.blood_state
|
||||
FP.blood_color = S.blood_color
|
||||
FP.entered_dirs |= dir
|
||||
FP.bloodiness = S.blood_smear[S.blood_state]
|
||||
FP.update_icon()
|
||||
update_inv_shoes()
|
||||
//End bloody footprints
|
||||
|
||||
else //we're on the floor, smear some stuff around
|
||||
if(loc == NewLoc)
|
||||
if(!has_gravity(loc))
|
||||
S.step_action()
|
||||
else
|
||||
if(loc == NewLoc)
|
||||
if(!has_gravity(loc))
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
var/step_print = dna.species.get_move_trail(src)
|
||||
if(bloodiness && blood_smear[blood_state])
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/oldFP = locate(step_print) in T
|
||||
if(oldFP && (oldFP.blood_state == blood_state && oldFP == dna.species.move_trail && oldFP.blood_color == blood_color))
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(bloodiness)
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints/tracks) in T
|
||||
if(oldFP && (oldFP.blood_state == blood_state && oldFP.color == color))
|
||||
return
|
||||
else
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/FP = new /obj/effect/decal/cleanable/blood/footprints/tracks/body(T)
|
||||
FP.icon_state = FOOTPRINT_DRAG
|
||||
FP.print_state = FOOTPRINT_DRAG
|
||||
FP.add_blood_DNA(return_blood_DNA())
|
||||
FP.blood_color = H.blood_color
|
||||
FP.update_icon()
|
||||
var/newdir = get_dir(T, loc)
|
||||
if(newdir == dir)
|
||||
FP.setDir(newdir)
|
||||
else
|
||||
newdir = newdir | dir
|
||||
if(newdir == 3)
|
||||
newdir = 1
|
||||
else if(newdir == 12)
|
||||
newdir = 4
|
||||
FP.setDir(newdir)
|
||||
bloodiness--
|
||||
else
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/FP = new step_print(T)
|
||||
if(("taur" in dna.species.mutant_bodyparts) && (dna.features["taur"] != "None") && !lying)
|
||||
if(dna.features["taur"] in GLOB.noodle_taurs)
|
||||
FP.icon_state = FOOTPRINT_SNAKE
|
||||
FP.print_state = FOOTPRINT_SNAKE
|
||||
else if(dna.features["taur"] in GLOB.paw_taurs)
|
||||
FP.icon_state = FOOTPRINT_PAW
|
||||
FP.print_state = FOOTPRINT_PAW
|
||||
if(!dna.species.move_trail && !lying) //we're assuming people have their chosen snowflake on, so.
|
||||
FP.icon_state = FOOTPRINT_SHOE
|
||||
FP.print_state = FOOTPRINT_SHOE
|
||||
|
||||
FP.add_blood_DNA(return_blood_DNA())
|
||||
FP.blood_color = blood_color
|
||||
FP.entered_dirs |= dir
|
||||
FP.bloodiness = blood_smear[blood_state]
|
||||
FP.update_icon()
|
||||
bloodiness--
|
||||
|
||||
/mob/living/carbon/human/Process_Spacemove(movement_dir = 0) //Temporary laziness thing. Will change to handles by species reee.
|
||||
if(dna.species.space_move(src))
|
||||
|
||||
@@ -77,7 +77,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/fixed_mut_color3 = ""
|
||||
var/whitelisted = 0 //Is this species restricted to certain players?
|
||||
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/footprints/tracks/move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/shoe // What marks are left when walking
|
||||
|
||||
///////////
|
||||
// PROCS //
|
||||
@@ -927,6 +927,15 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
return "TAUR"
|
||||
//END EDIT
|
||||
|
||||
// Impliments different trails for species depending on if they're wearing shoes.
|
||||
/datum/species/proc/get_move_trail(var/mob/living/carbon/human/H)
|
||||
if(H.lying)
|
||||
return /obj/effect/decal/cleanable/blood/footprints/tracks/body
|
||||
if(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)))
|
||||
var/obj/item/clothing/shoes/shoes = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) ? H.wear_suit : H.shoes // suits take priority over shoes
|
||||
return shoes.move_trail
|
||||
else
|
||||
return move_trail
|
||||
|
||||
/datum/species/proc/spec_life(mob/living/carbon/human/H)
|
||||
if(H.has_trait(TRAIT_NOBREATH))
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
blacklisted = 1
|
||||
limbs_id = "human"
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
|
||||
|
||||
var/datum/action/innate/flight/fly
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
disliked_food = GROSS | RAW
|
||||
liked_food = JUNKFOOD | FRIED
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
|
||||
|
||||
/datum/species/human/qualifies_for_rank(rank, list/features)
|
||||
return TRUE //Pure humans are always allowed in all roles.
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
inherent_traits = list(TRAIT_TOXINLOVER)
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime
|
||||
exotic_blood = "jellyblood"
|
||||
exotic_bloodtype = "GEL"
|
||||
damage_overlay_type = ""
|
||||
var/datum/action/innate/regenerate_limbs/regenerate_limbs
|
||||
var/datum/action/innate/slime_change/slime_change //CIT CHANGE
|
||||
@@ -17,6 +18,7 @@
|
||||
coldmod = 6 // = 3x cold damage
|
||||
heatmod = 0.5 // = 1/4x heat damage
|
||||
burnmod = 0.5 // = 1/2x generic burn damage
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
|
||||
|
||||
/datum/species/jelly/on_species_loss(mob/living/carbon/C)
|
||||
if(regenerate_limbs)
|
||||
@@ -119,7 +121,7 @@
|
||||
name = "Slimeperson"
|
||||
id = "slime"
|
||||
default_color = "00FFFF"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR)
|
||||
say_mod = "says"
|
||||
hair_color = "mutcolor"
|
||||
hair_alpha = 150
|
||||
|
||||
@@ -73,6 +73,7 @@
|
||||
/datum/species/lizard/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
|
||||
species_traits += DIGITIGRADE
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/claw
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(FALSE)
|
||||
return ..()
|
||||
@@ -80,6 +81,7 @@
|
||||
/datum/species/lizard/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
|
||||
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
|
||||
species_traits -= DIGITIGRADE
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(TRUE)
|
||||
|
||||
@@ -95,6 +97,7 @@
|
||||
mutantlungs = /obj/item/organ/lungs/ashwalker
|
||||
burnmod = 0.9
|
||||
brutemod = 0.9
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/claw
|
||||
|
||||
/datum/species/lizard/ashwalker/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
|
||||
if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
disliked_food = FRUIT | GROSS
|
||||
toxic_food = MEAT | RAW
|
||||
mutanteyes = /obj/item/organ/eyes/moth
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/claw
|
||||
|
||||
/datum/species/moth/on_species_gain(mob/living/carbon/C)
|
||||
. = ..()
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
var/internal_fire = FALSE //If the bones themselves are burning clothes won't help you much
|
||||
disliked_food = FRUIT
|
||||
liked_food = VEGETABLES
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
|
||||
|
||||
/datum/species/plasmaman/spec_life(mob/living/carbon/human/H)
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
|
||||
disliked_food = MEAT | DAIRY
|
||||
liked_food = VEGETABLES | FRUIT | GRAIN
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
|
||||
|
||||
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
|
||||
disliked_food = NONE
|
||||
liked_food = GROSS | MEAT | RAW
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
|
||||
|
||||
/datum/species/skeleton/check_roundstart_eligible()
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
|
||||
disliked_food = NONE
|
||||
liked_food = GROSS | MEAT | RAW
|
||||
move_trail = /obj/effect/decal/cleanable/blood/footprints/tracks/foot
|
||||
|
||||
/datum/species/zombie/check_roundstart_eligible()
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
@@ -47,7 +48,7 @@
|
||||
/datum/species/zombie/infectious/spec_life(mob/living/carbon/C)
|
||||
. = ..()
|
||||
C.a_intent = INTENT_HARM // THE SUFFERING MUST FLOW
|
||||
|
||||
|
||||
//Zombies never actually die, they just fall down until they regenerate enough to rise back up.
|
||||
//They must be restrained, beheaded or gibbed to stop being a threat.
|
||||
if(regen_cooldown < world.time)
|
||||
@@ -58,7 +59,7 @@
|
||||
C.adjustToxLoss(-heal_amt)
|
||||
if(!C.InCritical() && prob(4))
|
||||
playsound(C, pick(spooks), 50, TRUE, 10)
|
||||
|
||||
|
||||
//Congrats you somehow died so hard you stopped being a zombie
|
||||
/datum/species/zombie/infectious/spec_death(mob/living/carbon/C)
|
||||
. = ..()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/reagent/blood
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"= "O+","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
name = "Blood"
|
||||
id = "blood"
|
||||
color = BLOOD_COLOR_HUMAN // rgb: 200, 0, 0
|
||||
@@ -182,7 +182,7 @@
|
||||
description = "You don't even want to think about what's in here."
|
||||
taste_description = "gross iron"
|
||||
shot_glass_icon_state = "shotglassred"
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"= "O+","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
|
||||
/datum/reagent/liquidgibs/xeno
|
||||
name = "Liquid xeno gibs"
|
||||
|
||||
Reference in New Issue
Block a user