diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm index 79a3d82c7c4..1f62065ef99 100644 --- a/code/datums/diseases/advance/symptoms/vomit.dm +++ b/code/datums/diseases/advance/symptoms/vomit.dm @@ -89,6 +89,6 @@ Bonus if(brute_dam < 50) M.adjustBruteLoss(3) - var/turf/pos = get_turf(M) + var/turf/simulated/pos = get_turf(M) pos.add_blood_floor(M) playsound(pos, 'sound/effects/splat.ogg', 50, 1) \ No newline at end of file diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 99bf21d9c5d..1d7d4bce3a6 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -420,6 +420,7 @@ its easier to just keep the beam vertical. //returns 1 if made bloody, returns 0 otherwise /atom/proc/add_blood(mob/living/carbon/human/M as mob) + .=1 if (!( istype(M, /mob/living/carbon/human) )) return 0 if (!istype(M.dna, /datum/dna)) @@ -431,55 +432,6 @@ its easier to just keep the beam vertical. if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. blood_DNA = list() - //adding blood to items - if (istype(src, /obj/item)&&!istype(src, /obj/item/weapon/melee/energy))//Only regular items. Energy melee weapon are not affected. - var/obj/item/O = src - - //if we haven't made our blood_overlay already - if( !O.blood_overlay ) - var/icon/I = new /icon(O.icon, O.icon_state) - I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent) - I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant - - //not sure if this is worth it. It attaches the blood_overlay to every item of the same type if they don't have one already made. - for(var/obj/item/A in world) - if(A.type == O.type && !A.blood_overlay) - A.blood_overlay = I - - //apply the blood-splatter overlay if it isn't already in there - if(!blood_DNA.len) - O.overlays += O.blood_overlay - - //if this blood isn't already in the list, add it - - if(blood_DNA[M.dna.unique_enzymes]) - return 0 //already bloodied with this blood. Cannot add more. - blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - return 1 //we applied blood to the item - - //adding blood to turfs - else if (istype(src, /turf/simulated)) - var/turf/simulated/T = src - - //get one blood decal and infect it with virus from M.viruses - for(var/obj/effect/decal/cleanable/blood/B in T.contents) - if(!B.blood_DNA[M.dna.unique_enzymes]) - B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - /*for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = D.Copy(1) - B.viruses += newDisease - newDisease.holder = B*/ - return 1 //we bloodied the floor - - //if there isn't a blood decal already, make one. - var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(T) - newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - /*for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = D.Copy(1) - newblood.viruses += newDisease - newDisease.holder = newblood*/ - return 1 //we bloodied the floor - //adding blood to humans else if (istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src @@ -499,37 +451,6 @@ its easier to just keep the beam vertical. if(toxvomit) this.icon_state = "vomittox_[pick(1,4)]" - /*for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = D.Copy(1) - this.viruses += newDisease - newDisease.holder = this*/ - -// Only adds blood on the floor -- Skie -/atom/proc/add_blood_floor(mob/living/carbon/M as mob) - if( istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/human)) - if( istype(src, /turf/simulated) ) - var/turf/simulated/source1 = src - var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source1) - this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - /*for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = D.Copy(1) - this.viruses += newDisease - newDisease.holder = this*/ - - else if( istype(M, /mob/living/carbon/alien )) - if( istype(src, /turf/simulated) ) - var/turf/simulated/source2 = src - var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(source2) - this.blood_DNA["UNKNOWN BLOOD"] = "X*" - /*for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = D.Copy(1) - this.viruses += newDisease - newDisease.holder = this*/ - - else if( istype(M, /mob/living/silicon/robot )) - if( istype(src, /turf/simulated) ) - var/turf/simulated/source2 = src - new /obj/effect/decal/cleanable/oil(source2) /atom/proc/clean_blood() src.germ_level = 0 diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 516c0d74ca4..172eca9ae97 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -1,3 +1,4 @@ +#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var) /obj/effect/decal/cleanable/blood name = "blood" desc = "It's red and gooey. Perhaps it's the chef's cooking?" @@ -11,6 +12,7 @@ var/list/viruses = list() blood_DNA = list() var/datum/disease2/disease/virus2 = null + var/amount = 5 /obj/effect/decal/cleanable/blood/Del() for(var/datum/disease/D in viruses) @@ -25,16 +27,69 @@ if(src.loc && isturf(src.loc)) for(var/obj/effect/decal/cleanable/blood/B in src.loc) if(B != src) + if (B.blood_DNA) + blood_DNA |= B.blood_DNA.Copy() del(B) + spawn(DRYING_TIME * (amount+1)) + dry() + +/obj/effect/decal/cleanable/blood/HasEntered(mob/living/carbon/human/perp) + if (!istype(perp)) + return + if(amount < 1) + return + + if(perp.shoes) + perp.shoes:track_blood = max(amount,perp.shoes:track_blood) //Adding blood to shoes + if(!perp.shoes.blood_overlay) + perp.shoes.generate_blood_overlay() + if(!perp.shoes.blood_DNA) + perp.shoes.blood_DNA = list() + perp.shoes.overlays += perp.shoes.blood_overlay + perp.update_inv_shoes(1) + perp.shoes.blood_DNA |= blood_DNA.Copy() + else + perp.track_blood = max(amount,perp.track_blood) //Or feet + if(!perp.feet_blood_DNA) + perp.feet_blood_DNA = list() + perp.feet_blood_DNA |= blood_DNA.Copy() + + amount-- + +/obj/effect/decal/cleanable/blood/proc/dry() + name = "dried [src]" + desc = "It's dark red and crusty. Someone is not doing their job." + var/icon/I = icon(icon,icon_state) + I.SetIntensity(0.7) + icon = I + amount = 0 /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") + amount = 2 + +/obj/effect/decal/cleanable/blood/footprints + name = "bloody footprints" + desc = "Whoops..." + icon='icons/effects/footprints.dmi' + icon_state = "blood1" + amount = 0 + random_icon_states = null /obj/effect/decal/cleanable/blood/tracks icon_state = "tracks" desc = "They look like tracks left by wheels." gender = PLURAL random_icon_states = null + amount = 0 + +/obj/effect/decal/cleanable/blood/drip + name = "drips of blood" + desc = "It's red." + gender = PLURAL + icon = 'drip.dmi' + icon_state = "1" + amount = 0 /obj/effect/decal/cleanable/blood/gibs name = "gibs" @@ -89,4 +144,4 @@ icon = 'blood.dmi' icon_state = "mucus" random_icon_states = list("mucus") - var/datum/disease2/disease/virus2 = null + var/datum/disease2/disease/virus2 = null diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 8556b15abcf..78cf9617fd3 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -338,8 +338,8 @@ M.take_organ_damage(power) if (prob(33)) // Added blood for whacking non-humans too - var/turf/location = M.loc - if (istype(location, /turf/simulated)) + var/turf/simulated/location = M.loc + if (istype(location)) location.add_blood_floor(M) if("fire") if (!(COLD_RESISTANCE in M.mutations)) @@ -700,3 +700,39 @@ if(istype(src, /obj/item/clothing/gloves)) var/obj/item/clothing/gloves/G = src G.transfer_blood = 0 + + +/obj/item/add_blood(mob/living/carbon/human/M as mob) + if (!..()) + return 0 + + if(istype(src, /obj/item/weapon/melee/energy)) + return + + //if we haven't made our blood_overlay already + if( !blood_overlay ) + generate_blood_overlay() + + //apply the blood-splatter overlay if it isn't already in there + if(!blood_DNA.len) + overlays += blood_overlay + + //if this blood isn't already in the list, add it + + if(blood_DNA[M.dna.unique_enzymes]) + return 0 //already bloodied with this blood. Cannot add more. + blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + return 1 //we applied blood to the item + +/obj/item/proc/generate_blood_overlay() + if(blood_overlay) + return + + var/icon/I = new /icon(icon, icon_state) + I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent) + I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant + + //not sure if this is worth it. It attaches the blood_overlay to every item of the same type if they don't have one already made. + for(var/obj/item/A in world) + if(A.type == type && !A.blood_overlay) + A.blood_overlay = I \ No newline at end of file diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 73bacff124f..16d88a0ea0b 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -34,6 +34,31 @@ else playsound(src, "clownstep", 20, 1) + var/list/bloodDNA = null + if(H.shoes) + var/obj/item/clothing/shoes/S = H.shoes + if(S.track_blood && S.blood_DNA) + bloodDNA = S.blood_DNA + S.track_blood-- + else + if(H.track_blood && H.feet_blood_DNA) + bloodDNA = H.feet_blood_DNA + H.track_blood-- + + if (bloodDNA) + var/obj/effect/decal/cleanable/blood/footprints/here = new(src) + here.icon_state = "blood1" + here.dir = H.dir + here.blood_DNA |= bloodDNA.Copy() + var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) + if(from) + var/obj/effect/decal/cleanable/blood/footprints/there = new(from) + there.icon_state = "blood2" + there.dir = H.dir + there.blood_DNA |= bloodDNA.Copy() + + bloodDNA = null + switch (src.wet) if(1) if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes @@ -72,4 +97,33 @@ playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) M.Weaken(10) - ..() \ No newline at end of file + ..() + +//returns 1 if made bloody, returns 0 otherwise +/turf/simulated/add_blood(mob/living/carbon/human/M as mob) + if (!..()) + return 0 + + for(var/obj/effect/decal/cleanable/blood/B in contents) + if(!B.blood_DNA[M.dna.unique_enzymes]) + B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + return 1 //we bloodied the floor + + //if there isn't a blood decal already, make one. + var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src) + newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + return 1 //we bloodied the floor + + +// Only adds blood on the floor -- Skie +/turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob) + if( istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/human)) + var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(src) + this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + + else if( istype(M, /mob/living/carbon/alien )) + var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(src) + this.blood_DNA["UNKNOWN BLOOD"] = "X*" + + else if( istype(M, /mob/living/silicon/robot )) + new /obj/effect/decal/cleanable/oil(src) \ No newline at end of file diff --git a/code/modules/DetectiveWork/footprints_and_rag.dm b/code/modules/DetectiveWork/footprints_and_rag.dm index 5f8918c9074..6a1fd7abffe 100644 --- a/code/modules/DetectiveWork/footprints_and_rag.dm +++ b/code/modules/DetectiveWork/footprints_and_rag.dm @@ -1,33 +1,16 @@ /mob - var/bloody_hands = 0 var/mob/living/carbon/human/bloody_hands_mob - var/track_blood - var/mob/living/carbon/human/track_blood_mob + var/track_blood = 0 + var/list/feet_blood_DNA var/track_blood_type /obj/item/clothing/gloves var/transfer_blood = 0 var/mob/living/carbon/human/bloody_hands_mob -proc/blood_incompatible(donor,receiver) - if(!donor || !receiver) return 0 - var - donor_antigen = copytext(donor,1,lentext(donor)) - receiver_antigen = copytext(receiver,1,lentext(receiver)) - donor_rh = (findtext(donor,"+")>0) - receiver_rh = (findtext(receiver,"+")>0) - if(donor_rh && !receiver_rh) return 1 - switch(receiver_antigen) - if("A") - if(donor_antigen != "A" && donor_antigen != "O") return 1 - if("B") - if(donor_antigen != "B" && donor_antigen != "O") return 1 - if("O") - if(donor_antigen != "O") return 1 - //AB is a universal receiver. - return 0 - +/obj/item/clothing/shoes/ + var/track_blood = 0 /obj/item/weapon/reagent_containers/glass/rag name = "damp rag" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a73e6c21910..f20f5955d58 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1084,4 +1084,21 @@ if (germs == 2500) world << "Reached stage 3 in [ticks] ticks" world << "Mob took [tdamage] tox damage" -*/ \ No newline at end of file +*/ +//returns 1 if made bloody, returns 0 otherwise + +/mob/living/carbon/human/add_blood(mob/living/carbon/human/M as mob) + if (!..()) + return 0 + //if this blood isn't already in the list, add it + if(blood_DNA[M.dna.unique_enzymes]) + return 0 //already bloodied with this blood. Cannot add more. + blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + src.update_inv_gloves() //handles bloody hands overlays and updating + return 1 //we applied blood to the item + +/mob/living/carbon/human/clean_blood() + .=..() + if(istype(feet_blood_DNA, /list) && feet_blood_DNA.len) + del(feet_blood_DNA) + return 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 38c5f9d59ab..8346d753198 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -88,7 +88,6 @@ if (getCloneLoss() < 1) for (var/datum/organ/external/O in organs) - world << "[O.display_name]!" if (O.status & ORGAN_MUTATED) O.unmutate() src << "Your [O.display_name] is shaped normally again." diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 6e3ac4feda4..882582e4a35 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -218,4 +218,22 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 for(var/datum/reagent/blood/D in container.reagent_list) if(D.data["donor"] == src) return D - return res \ No newline at end of file + return res + +proc/blood_incompatible(donor,receiver) + if(!donor || !receiver) return 0 + var + donor_antigen = copytext(donor,1,lentext(donor)) + receiver_antigen = copytext(receiver,1,lentext(receiver)) + donor_rh = (findtext(donor,"+")>0) + receiver_rh = (findtext(receiver,"+")>0) + if(donor_rh && !receiver_rh) return 1 + switch(receiver_antigen) + if("A") + if(donor_antigen != "A" && donor_antigen != "O") return 1 + if("B") + if(donor_antigen != "B" && donor_antigen != "O") return 1 + if("O") + if(donor_antigen != "O") return 1 + //AB is a universal receiver. + return 0 \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 3377baf8f2d..4aa930167ee 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -143,6 +143,12 @@ else user.update_inv_r_hand() +/obj/item/weapon/gun/proc/can_fire() + return load_into_chamber() + +/obj/item/weapon/gun/proc/can_hit(var/mob/living/target as mob, var/mob/living/user as mob) + return in_chamber.check_fire(target,user) + /obj/item/weapon/gun/proc/click_empty(mob/user = null) if (user) user.visible_message("*click click*", "\red *click*") diff --git a/code/modules/projectiles/targeting.dm b/code/modules/projectiles/targeting.dm index 6507a2f66a1..fa982c1de7d 100644 --- a/code/modules/projectiles/targeting.dm +++ b/code/modules/projectiles/targeting.dm @@ -78,8 +78,8 @@ stop_aim() return M.last_move_intent = world.time - if(load_into_chamber()) - var/firing_check = in_chamber.check_fire(T,usr) //0 if it cannot hit them, 1 if it is capable of hitting, and 2 if a special check is preventing it from firing. + if(can_fire()) + var/firing_check = can_hit(T,usr) //0 if it cannot hit them, 1 if it is capable of hitting, and 2 if a special check is preventing it from firing. if(firing_check > 0) if(firing_check == 1) Fire(T,usr, reflex = 1) diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm index 30b1e66658b..eaa372bd45d 100644 --- a/code/modules/reagents/syringe_gun.dm +++ b/code/modules/reagents/syringe_gun.dm @@ -15,93 +15,100 @@ var/max_syringes = 1 m_amt = 2000 - examine() - set src in view() - ..() - if (!(usr in view(2)) && usr!=src.loc) return - usr << "\blue [syringes.len] / [max_syringes] syringes." +/obj/item/weapon/gun/syringe/examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + usr << "\blue [syringes.len] / [max_syringes] syringes." - attackby(obj/item/I as obj, mob/user as mob) - if(istype(I, /obj/item/weapon/reagent_containers/syringe)) - var/obj/item/weapon/reagent_containers/syringe/S = I - if(S.mode != 2)//SYRINGE_BROKEN in syringes.dm - if(syringes.len < max_syringes) - user.drop_item() - I.loc = src - syringes += I - user << "\blue You put the syringe in [src]." - user << "\blue [syringes.len] / [max_syringes] syringes." - else - usr << "\red [src] cannot hold more syringes." +/obj/item/weapon/gun/syringe/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/weapon/reagent_containers/syringe)) + var/obj/item/weapon/reagent_containers/syringe/S = I + if(S.mode != 2)//SYRINGE_BROKEN in syringes.dm + if(syringes.len < max_syringes) + user.drop_item() + I.loc = src + syringes += I + user << "\blue You put the syringe in [src]." + user << "\blue [syringes.len] / [max_syringes] syringes." else - usr << "\red This syringe is broken!" - - - afterattack(obj/target, mob/user , flag) - if(!isturf(target.loc) || target == user) return - - if(syringes.len) - spawn(0) fire_syringe(target,user) + usr << "\red [src] cannot hold more syringes." else - usr << "\red [src] is empty." + usr << "\red This syringe is broken!" - proc - fire_syringe(atom/target, mob/user) - if (locate (/obj/structure/table, src.loc)) - return - else - var/turf/trg = get_turf(target) - var/obj/effect/syringe_gun_dummy/D = new/obj/effect/syringe_gun_dummy(get_turf(src)) - var/obj/item/weapon/reagent_containers/syringe/S = syringes[1] - if((!S) || (!S.reagents)) //ho boy! wot runtimes! - return - S.reagents.trans_to(D, S.reagents.total_volume) - syringes -= S - del(S) - D.icon_state = "syringeproj" - D.name = "syringe" - playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - for(var/i=0, i<6, i++) - if(!D) break - if(D.loc == trg) break - step_towards(D,trg) +/obj/item/weapon/gun/syringe/afterattack(obj/target, mob/user , flag) + if(!isturf(target.loc) || target == user) return + ..() - if(D) - for(var/mob/living/carbon/M in D.loc) - if(!istype(M,/mob/living/carbon)) continue - if(M == user) continue - //Syringe gun attack logging by Yvarov - var/R - if(D.reagents) - for(var/datum/reagent/A in D.reagents.reagent_list) - R += A.id + " (" - R += num2text(A.volume) + ")," - if (istype(M, /mob)) - M.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" - user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" - log_attack("[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])") +/obj/item/weapon/gun/syringe/can_fire() + return syringes.len - else - M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a syringegun ([R])" - log_attack("UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])") +/obj/item/weapon/gun/syringe/can_hit(var/mob/living/target as mob, var/mob/living/user as mob) + return 1 //SHOOT AND LET THE GOD GUIDE IT (probably will hit a wall anyway) - if(D.reagents) - D.reagents.trans_to(M, 15) - M.visible_message("[M] is hit by the syringe!") +/obj/item/weapon/gun/syringe/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0) + if(syringes.len) + spawn(0) fire_syringe(target,user) + else + usr << "\red [src] is empty." - del(D) - break - if(D) - for(var/atom/A in D.loc) - if(A == user) continue - if(A.density) del(D) +/obj/item/weapon/gun/syringe/proc/fire_syringe(atom/target, mob/user) + if (locate (/obj/structure/table, src.loc)) + return + else + var/turf/trg = get_turf(target) + var/obj/effect/syringe_gun_dummy/D = new/obj/effect/syringe_gun_dummy(get_turf(src)) + var/obj/item/weapon/reagent_containers/syringe/S = syringes[1] + if((!S) || (!S.reagents)) //ho boy! wot runtimes! + return + S.reagents.trans_to(D, S.reagents.total_volume) + syringes -= S + del(S) + D.icon_state = "syringeproj" + D.name = "syringe" + playsound(user.loc, 'sound/items/syringeproj.ogg', 50, 1) - sleep(1) + for(var/i=0, i<6, i++) + if(!D) break + if(D.loc == trg) break + step_towards(D,trg) - if (D) spawn(10) del(D) + if(D) + for(var/mob/living/carbon/M in D.loc) + if(!istype(M,/mob/living/carbon)) continue + if(M == user) continue + //Syringe gun attack logging by Yvarov + var/R + if(D.reagents) + for(var/datum/reagent/A in D.reagents.reagent_list) + R += A.id + " (" + R += num2text(A.volume) + ")," + if (istype(M, /mob)) + M.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" + user.attack_log += "\[[time_stamp()]\] [user]/[user.ckey] shot [M]/[M.ckey] with a syringegun ([R])" + log_attack("[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])") - return + else + M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a syringegun ([R])" + log_attack("UNKNOWN shot [M] ([M.ckey]) with a syringegun ([R])") + + if(D.reagents) + D.reagents.trans_to(M, 15) + M.visible_message("[M] is hit by the syringe!") + + del(D) + break + if(D) + for(var/atom/A in D.loc) + if(A == user) continue + if(A.density) del(D) + + sleep(1) + + if (D) spawn(10) del(D) + + return /obj/item/weapon/gun/syringe/rapidsyringe name = "rapid syringe gun" diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 32781e99ed6..9f7d9f9c8ee 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -1328,13 +1328,3 @@ dirs = alldirs.Copy() src.streak(dirs) - -/obj/effect/decal/cleanable/blood/drip - name = "drips of blood" - desc = "It's red." - gender = PLURAL - density = 0 - anchored = 1 - layer = 2 - icon = 'drip.dmi' - icon_state = "1" diff --git a/html/changelog.html b/html/changelog.html index e2110ac7632..a92bcc133ca 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -58,21 +58,16 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit though. Thanks. --> - -