From 4025ccbee5d34b93cebfb01cd90ae3553bd9aacb Mon Sep 17 00:00:00 2001 From: Jeremy Liberman Date: Sat, 1 Mar 2014 22:53:23 -0600 Subject: [PATCH] Fractures and severed limbs cause cuffs to fall off. Deranged spessmen can chew their own wrists to break free. --- code/game/objects/items/weapons/handcuffs.dm | 24 +++++++++++++++- code/modules/organs/organ_external.dm | 30 +++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 5546a0db02..9508341c04 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -92,6 +92,28 @@ return return +var/last_chew = 0 +/mob/living/carbon/human/RestrainedClickOn(var/atom/A) + if (A != src) return ..() + if (last_chew + 26 > world.time) return + + var/mob/living/carbon/human/H = A + if (H.a_intent != "hurt") return + if (H.zone_sel.selecting != "mouth") return + + var/datum/organ/external/O = H.organs_by_name[H.hand?"l_hand":"r_hand"] + if (!O) return + + var/s = "\red [H.name] chews on \his [O.display_name]!" + H.visible_message(s, "\red You chew on your [O.display_name]!") + H.attack_log += text("\[[time_stamp()]\] [s] ([H.ckey])") + log_attack("[s] ([H.ckey])") + + if(O.take_damage(3,0,1,"teeth marks")) + H:UpdateDamageIcon() + + last_chew = world.time + /obj/item/weapon/handcuffs/cable name = "cable restraints" desc = "Looks like some cables tied together. Could be used to tie something up." @@ -123,4 +145,4 @@ color = "#FFFFFF" /obj/item/weapon/handcuffs/cyborg - dispenser = 1 \ No newline at end of file + dispenser = 1 diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 8ba5c0939a..466986b008 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -570,11 +570,32 @@ This function completely restores a damaged organ to perfect condition. owner.update_body(1) + // OK so maybe your limb just flew off, but if it was attached to a pair of cuffs then hooray! Freedom! + release_restraints() /**************************************************** HELPERS ****************************************************/ +/datum/organ/external/proc/release_restraints() + if (owner.handcuffed && body_part in list(ARM_LEFT, ARM_RIGHT, HAND_LEFT, HAND_RIGHT)) + owner.visible_message(\ + "\The [owner.handcuffed.name] falls off of [owner.name].",\ + "\The [owner.handcuffed.name] falls off you.") + + owner.handcuffed.loc = owner.loc + owner.handcuffed = null + owner.update_inv_handcuffed() + + if (owner.legcuffed && body_part in list(FOOT_LEFT, FOOT_RIGHT, LEG_LEFT, LEG_RIGHT)) + owner.visible_message(\ + "\The [owner.legcuffed.name] falls off of [owner.name].",\ + "\The [owner.legcuffed.name] falls off you.") + + owner.legcuffed.loc = owner.loc + owner.legcuffed = null + owner.update_inv_legcuffed() + /datum/organ/external/proc/bandage() var/rval = 0 src.status &= ~ORGAN_BLEEDING @@ -603,7 +624,10 @@ This function completely restores a damaged organ to perfect condition. /datum/organ/external/proc/fracture() if(status & ORGAN_BROKEN) return - owner.visible_message("\red You hear a loud cracking sound coming from \the [owner].","\red Something feels like it shattered in your [display_name]!","You hear a sickening crack.") + owner.visible_message(\ + "\red You hear a loud cracking sound coming from \the [owner].",\ + "\red Something feels like it shattered in your [display_name]!",\ + "You hear a sickening crack.") if(owner.species && !(owner.species.flags & NO_PAIN)) owner.emote("scream") @@ -612,6 +636,10 @@ This function completely restores a damaged organ to perfect condition. broken_description = pick("broken","fracture","hairline fracture") perma_injury = brute_dam + // Fractures have a chance of getting you out of restraints + if (prob(25)) + release_restraints() + /datum/organ/external/proc/robotize() src.status &= ~ORGAN_BROKEN src.status &= ~ORGAN_BLEEDING