diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index e8e91b73f0..0d2e88042d 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -276,8 +276,6 @@ #define COMSIG_TURF_MAKE_DRY "make_turf_try" //(max_strength, immediate, duration_decrease = INFINITY): Returns bool. #define COMSIG_COMPONENT_CLEAN_ACT "clean_act" //called on an object to clean it of cleanables. Usualy with soap: (num/strength) -//Blood color -#define COMSIG_BLOOD_COLOR "blood_DNA_to_color" //RGB blood stuff //Food #define COMSIG_FOOD_EATEN "food_eaten" //from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index ae385339be..ffad931cd8 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -91,13 +91,7 @@ GLOBAL_LIST_INIT(all_types_bloods,list( "BUG" )) -GLOBAL_LIST_INIT(blood_types, list( - "blood", - "jellyblood" +GLOBAL_LIST_INIT(blood_reagent_types, list( + /datum/reagent/blood, + /datum/reagent/blood/jellyblood )) - -GLOBAL_LIST_INIT(blood_id_types, list( - "blood" = /datum/reagent/blood, - "jellyblood" = /datum/reagent/blood/jellyblood - )) - diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 85a89178bb..960e1cc513 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -505,9 +505,8 @@ return final_rgb /atom/proc/clean_blood() - if(islist(blood_DNA)) - blood_DNA = null - return TRUE + . = blood_DNA? TRUE : FALSE + blood_DNA = null /atom/proc/wash_cream() return TRUE diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 89f70efc38..3a2ce43315 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -266,7 +266,7 @@ for(var/atom/movable/AM in things_to_clear) //Scorches away blood and forensic evidence, although the SSU itself is unaffected SEND_SIGNAL(AM, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG) AM.clean_blood() - AM.fingerprints = list() + AM.fingerprints = null var/datum/component/radioactive/contamination = AM.GetComponent(/datum/component/radioactive) if(contamination) qdel(contamination) diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index 748b8c9453..3afc0ef671 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -29,13 +29,19 @@ var/list/diseases = list() SEND_SIGNAL(src, COMSIG_GIBS_STREAK, directions, diseases) var/direction = pick(directions) - for(var/i in 0 to pick(0, 200; 1, 150; 2, 50)) - sleep(2) - if(i > 0) + var/dist = 0 + if(prob(50)) //yes this and the one below are different for a reason. + if(prob(25)) + dist = 2 + else + dist = 1 + if(dist) + for(var/i in 1 to dist) + sleep(2) var/obj/effect/decal/cleanable/blood/splatter/xeno/splat = new /obj/effect/decal/cleanable/blood/splatter/xeno(loc, diseases) splat.transfer_blood_dna(blood_DNA, diseases) - if(!step_to(src, get_step(src, direction), 0)) - break + if(!step_to(src, get_step(src, direction), 0)) + break /obj/effect/decal/cleanable/blood/gibs/xeno/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") diff --git a/code/game/objects/effects/decals/cleanable/gibs.dm b/code/game/objects/effects/decals/cleanable/gibs.dm index 9680dc2034..b6b93850f1 100644 --- a/code/game/objects/effects/decals/cleanable/gibs.dm +++ b/code/game/objects/effects/decals/cleanable/gibs.dm @@ -5,6 +5,7 @@ layer = LOW_OBJ_LAYER random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") mergeable_decal = FALSE + bloodiness = 0 //This isn't supposed to be bloody. var/body_colors = "#e3ba84" //a default color just in case. var/gibs_reagent_id = /datum/reagent/liquidgibs var/gibs_bloodtype = "A+" @@ -19,7 +20,6 @@ add_blood_DNA(list("Non-human DNA" = gibs_bloodtype, diseases)) update_icon() - /obj/effect/decal/cleanable/blood/gibs/update_icon() add_atom_colour(blood_DNA_to_color(), FIXED_COLOUR_PRIORITY) cut_overlays() @@ -44,13 +44,18 @@ var/list/diseases = list() SEND_SIGNAL(src, COMSIG_GIBS_STREAK, directions, diseases) var/direction = pick(directions) - for(var/i in 0 to pick(0, 200; 1, 150; 2, 50)) - sleep(2) - if(i > 0) + var/dist = 0 + if(prob(50)) //yes this and the one below are different for a reason. + if(prob(25)) + dist = 2 + else + dist = 1 + if(dist) + for(var/i in 1 to dist) var/obj/effect/decal/cleanable/blood/splatter/splat = new /obj/effect/decal/cleanable/blood/splatter(loc, diseases) splat.transfer_blood_dna(blood_DNA, diseases) - if(!step_to(src, get_step(src, direction), 0)) - break + 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") diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index d42d7d6b88..ab0d1caca4 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -5,12 +5,12 @@ icon_state = "floor1" random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") blood_state = BLOOD_STATE_BLOOD - bloodiness = MAX_SHOE_BLOODINESS + bloodiness = BLOOD_AMOUNT_PER_DECAL color = BLOOD_COLOR_HUMAN //default so we don't have white splotches everywhere. /obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C) if (C.blood_DNA) - blood_DNA |= C.blood_DNA.Copy() + blood_DNA |= C.blood_DNA update_icon() ..() diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 4887483334..c23311cf22 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -407,19 +407,17 @@ SLIME SCANNER // Blood Level if(M.has_dna()) var/mob/living/carbon/C = M - var/blood_id = C.get_blood_id() - if(blood_id) + var/blood_typepath = C.get_blood_id() + if(blood_typepath) if(ishuman(C)) if(H.bleed_rate) msg += "Subject is bleeding!\n" var/blood_percent = round((C.scan_blood_volume() / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100) var/blood_type = C.dna.blood_type - if(blood_id != ("blood" || "jellyblood"))//special blood substance - var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id] + if(!(blood_typepath in GLOB.blood_reagent_types)) + var/datum/reagent/R = GLOB.chemical_reagents_list[blood_typepath] if(R) blood_type = R.name - else - blood_type = blood_id if(C.scan_blood_volume() <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.scan_blood_volume() > (BLOOD_VOLUME_OKAY*C.blood_ratio)) msg += "LOW blood level [blood_percent] %, [C.scan_blood_volume()] cl, type: [blood_type]\n" else if(C.scan_blood_volume() <= (BLOOD_VOLUME_OKAY*C.blood_ratio)) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 324b40ac7f..36c4992e8f 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -399,11 +399,14 @@ . = ..() /obj/item/stack/proc/copy_evidences(obj/item/stack/from) - blood_DNA = from.blood_DNA - fingerprints = from.fingerprints - fingerprintshidden = from.fingerprintshidden - fingerprintslast = from.fingerprintslast - //TODO bloody overlay + if(from.blood_DNA) + blood_DNA = from.blood_DNA.Copy() + if(from.fingerprints) + fingerprints = from.fingerprints.Copy() + if(from.fingerprintshidden) + fingerprintshidden = from.fingerprintshidden.Copy() + if(from.fingerprintslast) + fingerprintslast = from.fingerprintslast /obj/item/stack/microwave_act(obj/machinery/microwave/M) if(istype(M) && M.dirty < 100) diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 4a3522fbd4..bfffe0fc60 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -35,7 +35,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons) /obj/item/storage/toolbox/update_icon() ..() cut_overlays() - if(blood_DNA && blood_DNA.len) + if(length(blood_DNA)) add_blood_overlay() if(has_latches) var/icon/I = icon('icons/obj/storage.dmi', latches) diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 206e3dfc5c..fc9e138f4b 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -347,7 +347,6 @@ icon_state = "dualsaber[item_color][wielded]" else icon_state = "dualsaber0" - clean_blood() /obj/item/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 794010d9c0..1bb1b8533a 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -753,7 +753,7 @@ var/turf/T = get_turf(target) if(T) for(var/obj/effect/decal/cleanable/blood/B in view(T, 2)) - if(B.blood_state == "blood") + if(B.blood_state == BLOOD_STATE_BLOOD) if(B.bloodiness == 100) //Bonus for "pristine" bloodpools, also to prevent cheese with footprint spam temp += 30 else diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index e6bb3f1295..492da73e66 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -246,7 +246,7 @@ lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' var/mob/living/carbon/human/target = null - var/list/mob/living/carbon/human/possible = list() + var/list/mob/living/carbon/human/possible var/obj/item/voodoo_link = null var/cooldown_time = 30 //3s var/cooldown = 0 @@ -284,7 +284,7 @@ user.unset_machine() /obj/item/voodoo/attack_self(mob/user) - if(!target && possible.len) + if(!target && length(possible)) target = input(user, "Select your victim!", "Voodoo") as null|anything in possible return @@ -324,12 +324,12 @@ cooldown = world.time + cooldown_time /obj/item/voodoo/proc/update_targets() - LAZYINITLIST(possible) + possible = null if(!voodoo_link) return for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) if(md5(H.dna.uni_identity) in voodoo_link.fingerprints) - possible |= H + LAZYOR(possible, H) /obj/item/voodoo/proc/GiveHint(mob/victim,force=0) if(prob(50) || force) diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index 634401d0d8..3b1b00fc3a 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -9,8 +9,7 @@ else if(M.bloody_hands > 1) if(add_blood_DNA(M.blood_DNA, M.diseases)) M.bloody_hands-- - if(!suit_fibers) - suit_fibers = list() + LAZYINITLIST(suit_fibers) var/fibertext var/item_multiplier = isitem(src)?1.2:1 if(M.wear_suit) @@ -66,7 +65,6 @@ fingerprintslast = M.ckey - //Set ignoregloves to add prints irrespective of the mob having gloves on. /atom/proc/add_fingerprint(mob/living/M, ignoregloves = FALSE) if(!M || !M.key) @@ -93,15 +91,10 @@ fingerprints[full_print] = full_print /atom/proc/transfer_fingerprints_to(atom/A) - // Make sure everything are lists. - LAZYINITLIST(A.fingerprints) - LAZYINITLIST(A.fingerprintshidden) - LAZYINITLIST(fingerprints) - LAZYINITLIST(fingerprintshidden) - - // Transfer if(fingerprints) - A.fingerprints |= fingerprints.Copy() //detective + LAZYINITLIST(A.fingerprints) + A.fingerprints |= fingerprints //detective if(fingerprintshidden) - A.fingerprintshidden |= fingerprintshidden.Copy() //admin - A.fingerprintslast = fingerprintslast \ No newline at end of file + LAZYINITLIST(A.fingerprintshidden) + A.fingerprintshidden |= fingerprintshidden //admin + A.fingerprintslast = fingerprintslast diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 30fde325df..c569a2c59a 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -33,7 +33,7 @@ bleed_rate = 0 return - if(bleed_rate <= 0) + if(bleed_rate < 0) bleed_rate = 0 if(HAS_TRAIT(src, TRAIT_NOMARROW)) //Bloodsuckers don't need to be here. @@ -94,12 +94,12 @@ //We want an accurate reading of .len listclearnulls(BP.embedded_objects) - temp_bleed += 0.5*BP.embedded_objects.len + temp_bleed += 0.5 * BP.embedded_objects.len if(brutedamage >= 20) temp_bleed += (brutedamage * 0.013) - bleed_rate = max(bleed_rate - 0.50, temp_bleed)//if no wounds, other bleed effects (heparin) naturally decreases + bleed_rate = max(bleed_rate - 0.5, temp_bleed)//if no wounds, other bleed effects (heparin) naturally decreases if(bleed_rate && !bleedsuppress && !(HAS_TRAIT(src, TRAIT_FAKEDEATH))) bleed(bleed_rate) @@ -289,8 +289,7 @@ drop.update_icon() return else - temp_blood_DNA = list() - temp_blood_DNA |= drop.blood_DNA.Copy() //we transfer the dna from the drip to the splatter + temp_blood_DNA = drop.blood_DNA.Copy() //transfer dna from drip to splatter. qdel(drop)//the drip is replaced by a bigger splatter else drop = new(T, get_static_viruses()) diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 11c4d7dbef..689ab56842 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -49,7 +49,6 @@ //Gets filled up in create_bodyparts() var/list/hand_bodyparts = list() //a collection of arms (or actually whatever the fug /bodyparts you monsters use to wreck my systems) - var/list/leg_bodyparts = list() var/icon_render_key = "" var/static/list/limb_icon_cache = list() diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 5bffc4e276..5020cc7379 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -87,7 +87,7 @@ if(!forced && HAS_TRAIT(src, TRAIT_TOXINLOVER)) //damage becomes healing and healing becomes damage amount = -amount if(amount > 0) - blood_volume -= 3*amount // x5 is too much, x3 should be still penalizing enough. + blood_volume -= 3 * amount //5x was too much, this is punishing enough. else blood_volume -= amount return ..() diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 460dd6ea51..f37673a5a3 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -59,7 +59,7 @@ var/obj/effect/decal/cleanable/blood/footprints/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints) in T if(oldFP && (oldFP.blood_state == S.blood_state && oldFP.color == bloodtype_to_color(S.last_bloodtype))) return - S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state]-BLOOD_LOSS_PER_STEP) + S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state] - BLOOD_LOSS_PER_STEP) var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T) FP.blood_state = S.blood_state FP.entered_dirs |= dir diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 0d909f5642..0e8e009ca8 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -494,7 +494,7 @@ if(isturf(next)) if(bloodiness) var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) - if(blood_DNA && blood_DNA.len) + if(length(blood_DNA)) B.blood_DNA |= blood_DNA.Copy() var/newdir = get_dir(next, loc) if(newdir == dir) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index f6f9204d09..c7e574594b 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1062,7 +1062,7 @@ if((HAS_TRAIT(C, TRAIT_NOMARROW))) return if(C.blood_volume < (BLOOD_VOLUME_NORMAL*C.blood_ratio)) - C.blood_volume += 0.01 //we'll have synthetics from medbay. + C.blood_volume += 0.25 ..() /datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index e2c77fa177..097be23c40 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -773,8 +773,6 @@ px_y = 12 stam_heal_tick = 4 max_stamina_damage = 50 - var/blood_state = BLOOD_STATE_NOT_BLOODY - var/list/bloody_legs = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) /obj/item/bodypart/l_leg/is_disabled() if(HAS_TRAIT(owner, TRAIT_PARALYSIS_L_LEG)) @@ -833,8 +831,6 @@ px_y = 12 max_stamina_damage = 50 stam_heal_tick = 4 - var/blood_state = BLOOD_STATE_NOT_BLOODY - var/list/bloody_legs = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) /obj/item/bodypart/r_leg/is_disabled() if(HAS_TRAIT(owner, TRAIT_PARALYSIS_R_LEG)) diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 51866b6719..eed8f62e10 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -17,7 +17,6 @@ return L return FALSE - /mob/proc/has_left_hand(check_disabled = TRUE) return TRUE @@ -29,7 +28,7 @@ return FALSE /mob/living/carbon/alien/larva/has_left_hand() - return 1 + return TRUE /mob/proc/has_right_hand(check_disabled = TRUE) @@ -43,9 +42,7 @@ return FALSE /mob/living/carbon/alien/larva/has_right_hand() - return 1 - - + return TRUE /mob/proc/has_left_leg() return TRUE @@ -67,7 +64,6 @@ else return FALSE - //Limb numbers /mob/proc/get_num_arms(check_disabled = TRUE) return 2 diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 51784bdc61..2d70f44e06 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -220,21 +220,12 @@ obj/item/organ/heart/cybernetic/upgraded/on_life() addtimer(VARSET_CALLBACK(src, dose_available, TRUE), 5 MINUTES) ramount = 0 - - /obj/item/organ/heart/ipc name = "IPC heart" desc = "An electronic pump that regulates hydraulic functions, they have an auto-restart after EMPs." icon_state = "heart-c" organ_flags = ORGAN_SYNTHETIC -/obj/item/organ/heart/ipc/emp_act() - . = ..() - if(. & EMP_PROTECT_SELF) - return - Stop() - addtimer(CALLBACK(src, .proc/Restart), 10) - /obj/item/organ/heart/freedom name = "heart of freedom" desc = "This heart pumps with the passion to give... something freedom." diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index 32474263c4..41eccb7054 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -1,7 +1,7 @@ //body bluids /datum/reagent/consumable/semen name = "Semen" - description = "Sperm from some animal. I bet you'll drink this out of a bucket someday." + description = "Sperm from some animal. Useless for anything but insemination, really." taste_description = "something salty" taste_mult = 2 //Not very overpowering flavor data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null) @@ -32,15 +32,15 @@ icon_state = "semen1" random_icon_states = list("semen1", "semen2", "semen3", "semen4") -/obj/effect/decal/cleanable/semen/New() - ..() - dir = pick(1,2,4,8) +/obj/effect/decal/cleanable/semen/Initialize(mapload) + . = ..() + dir = GLOB.cardinals add_blood_DNA(list("Non-human DNA" = "A+")) /obj/effect/decal/cleanable/semen/replace_decal(obj/effect/decal/cleanable/semen/S) if(S.blood_DNA) - blood_DNA |= S.blood_DNA.Copy() - ..() + blood_DNA |= S.blood_DNA + return ..() /datum/reagent/consumable/femcum name = "Female Ejaculate" @@ -65,15 +65,15 @@ blood_state = null bloodiness = null -/obj/effect/decal/cleanable/femcum/New() - ..() - dir = pick(1,2,4,8) +/obj/effect/decal/cleanable/femcum/Initialize(mapload) + . = ..() + dir = GLOB.cardinals add_blood_DNA(list("Non-human DNA" = "A+")) /obj/effect/decal/cleanable/femcum/replace_decal(obj/effect/decal/cleanable/femcum/F) if(F.blood_DNA) - blood_DNA |= F.blood_DNA.Copy() - ..() + blood_DNA |= F.blood_DNA + return ..() /datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume) if(!istype(T))