diff --git a/code/WorkInProgress/Yinadele/Supermatter.dm b/code/WorkInProgress/Yinadele/Supermatter.dm index 32fe1c1cb0..7765393bb1 100644 --- a/code/WorkInProgress/Yinadele/Supermatter.dm +++ b/code/WorkInProgress/Yinadele/Supermatter.dm @@ -91,23 +91,6 @@ if(!istype(L)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now. return //Yeah just stop. - //Ok, get the air from the turf - var/datum/gas_mixture/env = L.return_air() - - //Remove gas from surrounding area - var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles) - - if(!removed || !removed.total_moles) - damage += max((power-1600)/10, 0) - power = min(power, 1600) - return 1 - - if (!removed) - return 1 - - damage_archived = damage - damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 ) - if(damage > warning_point) // while the core is still damaged and it's still worth noting its status if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY) @@ -133,6 +116,22 @@ explode() + //Ok, get the air from the turf + var/datum/gas_mixture/env = L.return_air() + + //Remove gas from surrounding area + var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles) + + if(!removed || !removed.total_moles) + damage += max((power-1600)/10, 0) + power = min(power, 1600) + return 1 + + if (!removed) + return 1 + + damage_archived = damage + damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 ) //Ok, 100% oxygen atmosphere = best reaction //Maxes out at 100% oxygen pressure var/oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0) @@ -176,7 +175,7 @@ for(var/mob/living/carbon/human/l in view(src, round(power ** 0.25))) // you have to be seeing the core to get hallucinations if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) - l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / get_dist(l, src) ) ) ) + l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) ) for(var/mob/living/l in range(src, round((power / 100) ** 0.25))) var/rads = (power / 10) * sqrt( 1 / get_dist(l, src) ) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 821f42ee1b..1dbaeb1a3f 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -140,7 +140,7 @@ if(istype(M, /mob/living/carbon/human)) - M:attacked_by(src, user, def_zone) + return M:attacked_by(src, user, def_zone) else switch(damtype) if("brute") diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index dc3a3b36db..c335a6f1fa 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -258,6 +258,9 @@ client body += "" body += "" body += "" + + body += "" + body += "" if(ishuman(D)) body += "" body += "" @@ -808,6 +811,55 @@ client else usr << "Mob doesn't know that language." + else if(href_list["addverb"]) + if(!check_rights(R_DEBUG)) return + + var/mob/living/H = locate(href_list["addverb"]) + + if(!istype(H)) + usr << "This can only be done to instances of type /mob/living" + return + var/list/possibleverbs = list() + possibleverbs += "Cancel" // One for the top... + possibleverbs += typesof(/mob/proc,/mob/verb,/mob/living/proc,/mob/living/verb) + switch(H.type) + if(/mob/living/carbon/human) + possibleverbs += typesof(/mob/living/carbon/proc,/mob/living/carbon/verb,/mob/living/carbon/human/verb,/mob/living/carbon/human/proc) + if(/mob/living/silicon/robot) + possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/robot/proc,/mob/living/silicon/robot/verb) + if(/mob/living/silicon/ai) + possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb) + possibleverbs -= H.verbs + possibleverbs += "Cancel" // ...And one for the bottom + + var/verb = input("Select a verb!", "Verbs",null) as anything in possibleverbs + if(!H) + usr << "Mob doesn't exist anymore" + return + if(!verb || verb == "Cancel") + return + else + H.verbs += verb + + else if(href_list["remverb"]) + if(!check_rights(R_DEBUG)) return + + var/mob/H = locate(href_list["remverb"]) + + if(!istype(H)) + usr << "This can only be done to instances of type /mob" + return + var/verb = input("Please choose a verb to remove.","Verbs",null) as null|anything in H.verbs + if(!H) + usr << "Mob doesn't exist anymore" + return + if(!verb) + return + else + H.verbs -= verb + + + else if(href_list["regenerateicons"]) if(!check_rights(0)) return diff --git a/code/datums/mind.dm b/code/datums/mind.dm index bdde89fc94..3060d7b1a8 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -552,6 +552,7 @@ datum/mind current << "\red You have been brainwashed! You are no longer a head revolutionary!" ticker.mode.update_rev_icons_removed(src) special_role = null + current.verbs -= /mob/living/carbon/human/proc/RevConvert log_admin("[key_name_admin(usr)] has de-rev'ed [current].") if("rev") @@ -572,7 +573,7 @@ datum/mind if(src in ticker.mode.revolutionaries) ticker.mode.revolutionaries -= src ticker.mode.update_rev_icons_removed(src) - current << "\red You have proved your devotion to revoltion! Yea are a head revolutionary now!" + current << "\red You have proved your devotion to revoltion! You are a head revolutionary now!" else if(!(src in ticker.mode.head_revolutionaries)) current << "\blue You are a member of the revolutionaries' leadership now!" else @@ -588,6 +589,7 @@ datum/mind rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]." objectives += rev_obj ticker.mode.greet_revolutionary(src,0) + current.verbs += /mob/living/carbon/human/proc/RevConvert ticker.mode.head_revolutionaries += src ticker.mode.update_rev_icons_added(src) special_role = "Head Revolutionary" diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm index d00b58d23b..98f97cf460 100644 --- a/code/game/gamemodes/revolution/rp_revolution.dm +++ b/code/game/gamemodes/revolution/rp_revolution.dm @@ -156,9 +156,17 @@ return 1 -/mob/living/carbon/human/proc/RevConvert(mob/M as mob in oview(src)) +/mob/living/carbon/human/proc/RevConvert() set name = "Rev-Convert" set category = "IC" + var/list/Possible = list() + for (var/mob/living/carbon/human/P in oview(src)) + if(!stat && P.client && P.mind && !P.mind.special_role) + Possible += P + if(!Possible.len) + src << "\red There doesn't appear to be anyone available for you to convert here." + return + var/mob/living/carbon/human/M = input("Select a person to convert", "Viva la revolution!", null) as mob in Possible if(((src.mind in ticker.mode:head_revolutionaries) || (src.mind in ticker.mode:revolutionaries))) if((M.mind in ticker.mode:head_revolutionaries) || (M.mind in ticker.mode:revolutionaries)) src << "\red [M] is already be a revolutionary!" @@ -251,4 +259,4 @@ rev_obj.target = M.mind rev_obj.explanation_text = "Assassinate, convert or capture [M.real_name], the [M.mind.assigned_role]." rev_mind.objectives += rev_obj - rev_mind.current << "\red A new Head of Staff, [M.real_name], the [M.mind.assigned_role] has appeared. Your objectives have been updated." \ No newline at end of file + rev_mind.current << "\red A new Head of Staff, [M.real_name], the [M.mind.assigned_role] has appeared. Your objectives have been updated." diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 1503ff6ebe..a7ad25934a 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -249,6 +249,12 @@ if (src.occupant.reagents.get_reagent_amount("inaprovaline") < 30) src.occupant.reagents.add_reagent("inaprovaline", 60) + //So clones will remain asleep for long enough to get them into cryo (Bay RP edit) + if (src.occupant.reagents.get_reagent_amount("stoxin") < 10) + src.occupant.reagents.add_reagent("stoxin", 5) + if (src.occupant.reagents.get_reagent_amount("chloralhydrate") < 1) + src.occupant.reagents.add_reagent("chloralhydrate", 1) + //Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!! src.occupant.adjustOxyLoss(-4) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 95215daf65..3a0de6a800 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -211,7 +211,9 @@ obj/machinery/computer/cryopod/Topic(href, href_list) //Update any existing objectives involving this mob. for(var/datum/objective/O in all_objectives) - if(O.target && istype(O.target,/datum/mind)) + if(istype(O,/datum/objective/mutiny)) //We don't want revs to get objectives that aren't for heads of staff. Letting them win or lose based on cryo is silly so we remove the objective. + del(O) //TODO: Update rev objectives on login by head (may happen already?) ~ Z + else if(O.target && istype(O.target,/datum/mind)) if(O.target == occupant.mind) if(O.owner && O.owner.current) O.owner.current << "\red You get the feeling your target is no longer within your reach. Time for Plan [pick(list("A","B","C","D","X","Y","Z"))]..." @@ -331,9 +333,9 @@ obj/machinery/computer/cryopod/Topic(href, href_list) return if(orient_right) - icon_state = "body_scanner0-r" + icon_state = "body_scanner_0-r" else - icon_state = "body_scanner0" + icon_state = "body_scanner_0" src.go_out() add_fingerprint(usr) @@ -409,4 +411,4 @@ obj/machinery/computer/cryopod/Topic(href, href_list) //Attacks/effects. /obj/machinery/cryopod/blob_act() - return //Sorta gamey, but we don't really want these to be destroyed. \ No newline at end of file + return //Sorta gamey, but we don't really want these to be destroyed. diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 640fc00afc..03d97e0e1f 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -384,7 +384,7 @@ user.visible_message("[user] turned the shield generator off.", \ "You turn off the shield generator.", \ "You hear heavy droning fade out.") - src.cleanup() + for(var/dir in list(1,2,4,8)) src.cleanup(dir) else src.active = 1 icon_state = "Shield_Gen +a" @@ -424,14 +424,7 @@ "You hear heavy droning fade out") icon_state = "Shield_Gen" src.active = 0 - spawn(1) - src.cleanup(1) - spawn(1) - src.cleanup(2) - spawn(1) - src.cleanup(4) - spawn(1) - src.cleanup(8) + for(var/dir in list(1,2,4,8)) src.cleanup(dir) /obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0) var/turf/T = src.loc diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 41565dbe63..2adadfd94b 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -70,7 +70,7 @@ flick("e_flash", M.flash) if(ishuman(M) && ishuman(user) && M.stat!=DEAD) - if(user.mind && user.mind in ticker.mode.head_revolutionaries) + if(user.mind && user.mind in ticker.mode.head_revolutionaries && ticker.mode.name == "revolution") var/revsafe = 0 for(var/obj/item/weapon/implant/loyalty/L in M) if(L && L.implanted) @@ -86,7 +86,6 @@ user << "Something seems to be blocking the flash!" else user << "This mind seems resistant to the flash!" - user << "This mind is so vacant that it is not susceptible to influence!" else flashfail = 1 diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index e6a1a4dff8..8b9d914bc2 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -153,7 +153,7 @@ playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) add_fingerprint(user) - if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any + if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any overlays.Cut()//this might delete other item overlays as well but eeeeeeeh var/icon/I = new /icon(src.icon, src.icon_state) @@ -176,12 +176,10 @@ else user.take_organ_damage(2*force) return - - if(!..()) return - playsound(src.loc, "swing_hit", 50, 1, -1) - //target.Stun(4) //naaah - target.Weaken(4) - return + if(..()) + playsound(src.loc, "swing_hit", 50, 1, -1) + target.Weaken(4) + return else return ..() @@ -216,8 +214,6 @@ /* * Energy Axe */ -/obj/item/weapon/melee/energy/axe/attack(target as mob, mob/user as mob) - ..() /obj/item/weapon/melee/energy/axe/attack_self(mob/user as mob) src.active = !( src.active ) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 5c50973691..3655effb9e 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -372,18 +372,21 @@ usr << "\red Your thermals intensify the welder's glow. Your eyes itch and burn severely." user.eye_blurry += rand(12,20) E.damage += rand(12, 16) - if(E.damage > 10 && safety < 2) - user << "\red Your eyes are really starting to hurt. This can't be good for you!" - if (E.damage >= E.min_broken_damage) - user << "\red You go blind!" - user.sdisabilities |= BLIND - else if (E.damage >= E.min_bruised_damage) - user << "\red You go blind!" - user.eye_blind = 5 - user.eye_blurry = 5 - user.disabilities |= NEARSIGHTED - spawn(100) - user.disabilities &= ~NEARSIGHTED + if(safety<2) + + if(E.damage > 10) + user << "\red Your eyes are really starting to hurt. This can't be good for you!" + + if (E.damage >= E.min_broken_damage) + user << "\red You go blind!" + user.sdisabilities |= BLIND + else if (E.damage >= E.min_bruised_damage) + user << "\red You go blind!" + user.eye_blind = 5 + user.eye_blurry = 5 + user.disabilities |= NEARSIGHTED + spawn(100) + user.disabilities &= ~NEARSIGHTED return diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index d6ff60c2a2..8e3f5e29bb 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -55,7 +55,7 @@ //get message text, limit it's length.and clean/escape html if(!msg) - msg = input(src,"Message:", "Private message to [C.key]") as text|null + msg = input(src,"Message:", "Private message to [key_name(C, 0, holder ? 1 : 0)]") as text|null if(!msg) return if(!C) @@ -80,10 +80,10 @@ //mod PMs are maroon //PMs sent from admins and mods display their rank if(holder) - if( holder.rights & R_MOD ) - recieve_color = "maroon" - else + if( holder.rights & R_ADMIN ) recieve_color = "red" + else + recieve_color = "maroon" send_pm_type = holder.rank + " " recieve_pm_type = holder.rank diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 5e32633597..379ef4cb6b 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -129,7 +129,7 @@ /obj/item/clothing/shoes/swimmingfins desc = "Help you swim good." name = "swimming fins" - icon_state = "flippers" + icon_state = "flipperfeet" flags = NOSLIP slowdown = SHOES_SLOWDOWN+1 species_restricted = null diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index 2ea4ffcc61..cec9f6ff39 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -13,6 +13,7 @@ heat_protection = HEAD max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox") + attack_self(mob/user) if(!isturf(user.loc)) user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities. @@ -24,6 +25,10 @@ if(on) user.SetLuminosity(user.luminosity + brightness_on) else user.SetLuminosity(user.luminosity - brightness_on) + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_head() + pickup(mob/user) if(on) user.SetLuminosity(user.luminosity + brightness_on) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index aa381c8c3d..60eeac7dc3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1114,82 +1114,6 @@ del(feet_blood_DNA) return 1 -mob/living/carbon/human/yank_out_object() - set category = "Object" - set name = "Yank out object" - set desc = "Remove an embedded item at the cost of bleeding and pain." - set src in view(1) - - if(!isliving(usr) || usr.next_move > world.time) - return - usr.next_move = world.time + 20 - - if(usr.stat == 1) - usr << "You are unconcious and cannot do that!" - return - - if(usr.restrained()) - usr << "You are restrained and cannot do that!" - return - - var/list/valid_objects = list() - var/datum/organ/external/affected = null - var/mob/living/carbon/human/S = src - var/mob/living/carbon/human/U = usr - var/self = null - - if(S == U) - self = 1 // Removing object from yourself. - - valid_objects = get_visible_implants(1) - - if(!valid_objects.len) - if(self) - src << "You have nothing stuck in your wounds that is large enough to remove without surgery." - else - U << "[src] has nothing stuck in their wounds that is large enough to remove without surgery." - return - - var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects - - for(var/datum/organ/external/organ in organs) //Grab the organ holding the implant. - for(var/obj/item/weapon/O in organ.implants) - if(O == selection) - affected = organ - if(self) - src << "You attempt to get a good grip on the [selection] in your [affected.display_name] with bloody fingers." - else - U << "You attempt to get a good grip on the [selection] in [S]'s [affected.display_name] with bloody fingers." - - if(istype(U,/mob/living/carbon/human/)) U.bloody_hands(S) - - if(!do_after(U, 80)) - return - - if(!selection || !affected || !S || !U) - return - - if(self) - visible_message("[src] rips [selection] out of their [affected.display_name] in a welter of blood.","You rip [selection] out of your [affected] in a welter of blood.") - else - visible_message("[usr] rips [selection] out of [src]'s [affected.display_name] in a welter of blood.","[usr] rips [selection] out of your [affected] in a welter of blood.") - - selection.loc = get_turf(src) - affected.implants -= selection - shock_stage+=10 - - for(var/obj/item/weapon/O in pinned) - if(O == selection) - pinned -= O - if(!pinned.len) - anchored = 0 - - if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. - var/datum/wound/internal_bleeding/I = new (15) - affected.wounds += I - custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) - return 1 - /mob/living/carbon/human/proc/get_visible_implants(var/class = 0) var/list/visible_implants = list() diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 40db476eba..17fb4fc3eb 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -245,6 +245,7 @@ This function restores all organs. if( (damage > (10*W.w_class)) && ( (sharp && !ismob(W.loc)) || prob(damage/W.w_class) ) ) organ.implants += W visible_message("\The [W] sticks in the wound!") + src.verbs += /mob/proc/yank_out_object W.add_blood(src) if(ismob(W.loc)) var/mob/living/H = W.loc diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index b1a20b144e..c7273d5d34 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -99,6 +99,7 @@ emp_act (SP.loc) = organ organ.implants += SP visible_message("The projectile sticks in the wound!") + src.verbs += /mob/proc/yank_out_object SP.add_blood(src) return (..(P , def_zone)) @@ -195,14 +196,14 @@ emp_act target_zone = user.zone_sel.selecting if(!target_zone) visible_message("\red [user] misses [src] with \the [I]!") - return + return 0 var/datum/organ/external/affecting = get_organ(target_zone) if (!affecting) - return + return 0 if(affecting.status & ORGAN_DESTROYED) user << "What [affecting.display_name]?" - return + return 0 var/hit_area = affecting.display_name if((user != src) && check_shields(I.force, "the [I.name]")) @@ -219,7 +220,7 @@ emp_act var/obj/item/weapon/card/emag/emag = I emag.uses-- affecting.sabotaged = 1 - return + return 1 if(I.attack_verb.len) visible_message("\red [src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!") @@ -274,6 +275,7 @@ emp_act if(bloody) bloody_body(src) + return 1 /mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2) if (gloves) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ecfe8feae5..c69b25d493 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -895,7 +895,7 @@ note dizziness decrements automatically in the mob's Life() proc. /mob/proc/flash_weak_pain() flick("weak_pain",pain) -mob/verb/yank_out_object() +mob/proc/yank_out_object() set category = "Object" set name = "Yank out object" set desc = "Remove an embedded item at the cost of bleeding and pain." @@ -921,9 +921,13 @@ mob/verb/yank_out_object() if(S == U) self = 1 // Removing object from yourself. - for(var/obj/item/weapon/W in embedded) - if(W.w_class >= 2) - valid_objects += W + if(istype(src,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = src + valid_objects = H.get_visible_implants(1) + else + for(var/obj/item/weapon/W in embedded) + if(W.w_class >= 2) + valid_objects += W if(!valid_objects.len) if(self) @@ -948,6 +952,27 @@ mob/verb/yank_out_object() visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.") else visible_message("[usr] rips [selection] out of [src]'s body.","[usr] rips [selection] out of your body.") + src.verbs -= /mob/proc/yank_out_object + + if(istype(src,/mob/living/carbon/human)) + + var/mob/living/carbon/human/H = src + var/datum/organ/external/affected + + for(var/datum/organ/external/organ in H.organs) //Grab the organ holding the implant. + for(var/obj/item/weapon/O in organ.implants) + if(O == selection) + affected = organ + + affected.implants -= selection + H.shock_stage+=10 + H.bloody_hands(S) + + if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-. + var/datum/wound/internal_bleeding/I = new (15) + affected.wounds += I + H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) + return 1 selection.loc = get_turf(src) diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 94aba05f82..ba5a2bc540 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index 1d1e631837..49399082f6 100644 Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ