diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm index cb9469d714..84d7b556db 100644 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ b/code/game/objects/effects/decals/Cleanable/aliens.dm @@ -14,6 +14,9 @@ bloodiness = MAX_SHOE_BLOODINESS blood_state = BLOOD_STATE_XENO +/obj/effect/decal/cleanable/xenoblood/can_bloodcrawl_in() + return 1 + /obj/effect/decal/cleanable/xenoblood/Destroy() for(var/datum/disease/D in viruses) D.cure(0) @@ -37,6 +40,9 @@ /obj/effect/decal/cleanable/xenoblood/xsplatter random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5") +/obj/effect/decal/cleanable/xsplatter/can_bloodcrawl_in() + return 1 + /obj/effect/decal/cleanable/xenoblood/xgibs name = "xeno gibs" desc = "Gnarly..." @@ -45,6 +51,10 @@ icon_state = "xgib1" random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") +/obj/effect/decal/cleanable/xgibs/can_bloodcrawl_in() + return 1 + + /obj/effect/decal/cleanable/xenoblood/xgibs/ex_act() return @@ -67,3 +77,15 @@ icon_state = "xtracks" random_icon_states = null blood_DNA = list("UNKNOWN DNA" = "X*") + +/obj/effect/decal/cleanable/xdrip + name = "drips of blood" + desc = "It's green." + gender = PLURAL + icon_state = "1" + random_icon_states = list("xdrip1","xdrip2","xdrip3","xdrip4","xdrip5") + bloodiness = 0 + var/drips = 1 + +/obj/effect/decal/cleanable/xdrip/can_bloodcrawl_in() + return 1 \ No newline at end of file diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index f4a39d3477..c00b93b76e 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -216,37 +216,64 @@ return list("O-", "O+") if("L") return list("L") + if("X") + return list("X") //to add a splatter of blood or other mob liquid. /mob/living/proc/add_splatter_floor(turf/T, small_drip) - if(get_blood_id() != "blood") + if(get_blood_id() != "blood" && get_blood_id() != "xblood") return if(!T) T = get_turf(src) - var/list/temp_blood_DNA if(small_drip) // Only a certain number of drips (or one large splatter) can be on a given turf. - var/obj/effect/decal/cleanable/blood/drip/drop = locate() in T - if(drop) - if(drop.drips < 3) - drop.drips++ - drop.overlays |= pick(drop.random_icon_states) + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(H.dna.species == "xeno") + var/obj/effect/decal/cleanable/xdrip/xdrop = locate() in T + if(xdrop) + if(xdrop.drips < 3) + xdrop.drips++ + xdrop.overlays |= pick(xdrop.random_icon_states) + xdrop.transfer_mob_blood_dna(src) + return + else + temp_blood_DNA = list() + temp_blood_DNA |= xdrop.blood_DNA.Copy() //we transfer the dna from the drip to the splatter + qdel(xdrop)//the drip is replaced by a bigger splatter + else + xdrop = new(T) + xdrop.transfer_mob_blood_dna(src) + return + else + var/obj/effect/decal/cleanable/blood/drip/drop = locate() in T + if(drop) + if(drop.drips < 3) + drop.drips++ + drop.overlays |= pick(drop.random_icon_states) + drop.transfer_mob_blood_dna(src) + return + else + temp_blood_DNA = list() + temp_blood_DNA |= drop.blood_DNA.Copy() //we transfer the dna from the drip to the splatter + qdel(drop)//the drip is replaced by a bigger splatter + else + drop = new(T) drop.transfer_mob_blood_dna(src) return - else - temp_blood_DNA = list() - temp_blood_DNA |= drop.blood_DNA.Copy() //we transfer the dna from the drip to the splatter - qdel(drop)//the drip is replaced by a bigger splatter - else - drop = new(T) - drop.transfer_mob_blood_dna(src) - return // Find a blood decal or create a new one. var/obj/effect/decal/cleanable/blood/B = locate() in T if(!B) - B = new /obj/effect/decal/cleanable/blood/splatter(T) + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(H.dna.species == "xeno") + B = new /obj/effect/decal/cleanable/xenoblood(T) + else + B = new /obj/effect/decal/cleanable/blood/splatter(T) + else + B = new /obj/effect/decal/cleanable/blood/splatter(T) B.transfer_mob_blood_dna(src) //give blood info to the blood decal. if(temp_blood_DNA) B.blood_DNA |= temp_blood_DNA @@ -268,4 +295,4 @@ T = get_turf(src) var/obj/effect/decal/cleanable/oil/B = locate() in T.contents if(!B) - B = new(T) \ No newline at end of file + B = new(T) diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index e30f0d5f8a..a9c85e2a12 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -300,6 +300,7 @@ var/datum/action/innate/split_body/slime_split var/list/mob/living/carbon/bodies var/datum/action/innate/swap_body/swap_body + roundstart = 1 /datum/species/jelly/slime/on_species_loss(mob/living/carbon/C) if(slime_split) diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 8a69f4c2bc..ebceed99a1 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ