diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index 700f0686d0..a29f6ab08c 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -413,5 +413,3 @@ path = /obj/item/weapon/handcuffs hidden = 1 category = "General" - - diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index c88ad3e641..03814de92c 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -12,6 +12,7 @@ throw_range = 5 origin_tech = list(TECH_MATERIAL = 1) matter = list(DEFAULT_WALL_MATERIAL = 500) + var/elastic var/dispenser = 0 var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes var/cuff_sound = 'sound/weapons/handcuffs.ogg' @@ -53,20 +54,20 @@ var/mob/living/carbon/human/H = target if(!istype(H)) - return + return 0 if (!H.has_organ_for_slot(slot_handcuffed)) user << "\The [H] needs at least two wrists before you can cuff them together!" - return + return 0 - if(istype(H.gloves,/obj/item/clothing/gloves/rig)) // Can't cuff someone who's in a deployed hardsuit. - user << "The cuffs won't fit around \the [H.gloves]!" - return + if(istype(H.gloves,/obj/item/clothing/gloves/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit. + user << "\The [src] won't fit around \the [H.gloves]!" + return 0 user.visible_message("\The [user] is attempting to put [cuff_type] on \the [H]!") if(!do_after(user,30)) - return + return 0 H.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [H.name] ([H.ckey])") @@ -84,7 +85,7 @@ cuffs.loc = target target.handcuffed = cuffs target.update_inv_handcuffed() - return + return 1 var/last_chew = 0 /mob/living/carbon/human/RestrainedClickOn(var/atom/A) @@ -118,6 +119,7 @@ var/last_chew = 0 breakouttime = 300 //Deciseconds = 30s cuff_sound = 'sound/weapons/cablecuff.ogg' cuff_type = "cable restraints" + elastic = 1 /obj/item/weapon/handcuffs/cable/red color = "#DD0000" @@ -156,3 +158,12 @@ var/last_chew = 0 /obj/item/weapon/handcuffs/cyborg dispenser = 1 + +/obj/item/weapon/handcuffs/cable/tape + name = "tape restraints" + desc = "DIY!" + icon_state = "tape_cross" + item_state = null + icon = 'icons/obj/bureaucracy.dmi' + breakouttime = 200 + cuff_type = "duct tape" \ No newline at end of file diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 911a6334d2..57a31cdd1d 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -5,18 +5,71 @@ icon_state = "taperoll" w_class = 1 -/* -- Disabled for now until it has a use -- -/obj/item/weapon/tape_roll/attack_self(mob/user as mob) - user << "You remove a length of tape from [src]." - - var/obj/item/weapon/ducttape/tape = new() - user.put_in_hands(tape) -*/ +/obj/item/weapon/tape_roll/attack(var/mob/living/carbon/human/H, var/mob/user) + if(istype(H)) + if(user.zone_sel.selecting == "eyes") + + if(!H.organs_by_name["head"]) + user << "\The [H] doesn't have a head." + return + if(!H.has_eyes()) + user << "\The [H] doesn't have any eyes." + return + if(H.glasses) + user << "\The [H] is already wearing somethign on their eyes." + return + if(H.head && (H.head.body_parts_covered & FACE)) + user << "Remove their [H.head] first." + return + user.visible_message("\The [user] begins taping over \the [H]'s eyes!") + + if(!do_after(user, 30)) + return + + // Repeat failure checks. + if(!H || !src || !H.organs_by_name["head"] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE))) + return + + user.visible_message("\The [user] has taped up \the [H]'s eyes!") + H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/blindfold/tape(H), slot_glasses) + + else if(user.zone_sel.selecting == "mouth" || user.zone_sel.selecting == "head") + if(!H.organs_by_name["head"]) + user << "\The [H] doesn't have a head." + return + if(!H.check_has_mouth()) + user << "\The [H] doesn't have a mouth." + return + if(H.wear_mask) + user << "\The [H] is already wearing a mask." + return + if(H.head && (H.head.body_parts_covered & FACE)) + user << "Remove their [H.head] first." + return + user.visible_message("\The [user] begins taping up \the [H]'s mouth!") + + if(!do_after(user, 30)) + return + + // Repeat failure checks. + if(!H || !src || !H.organs_by_name["head"] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE))) + return + + user.visible_message("\The [user] has taped up \the [H]'s mouth!") + H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask) + + else if(user.zone_sel.selecting == "r_hand" || user.zone_sel.selecting == "l_hand") + var/obj/item/weapon/handcuffs/cable/tape/T = new(user) + if(!T.place_handcuffs(H, user)) + user.unEquip(T) + qdel(T) + else + return ..() + return 1 /obj/item/weapon/tape_roll/proc/stick(var/obj/item/weapon/W, mob/user) if(!istype(W, /obj/item/weapon/paper)) return - user.drop_from_inventory(W) var/obj/item/weapon/ducttape/tape = new(get_turf(src)) tape.attach(W) @@ -52,7 +105,7 @@ return user << "You remove \the [initial(name)] from [stuck]." - + user.drop_from_inventory(src) stuck.forceMove(get_turf(src)) user.put_in_hands(stuck) @@ -61,6 +114,7 @@ qdel(src) /obj/item/weapon/ducttape/afterattack(var/A, mob/user, flag, params) + if(!in_range(user, A) || istype(A, /obj/machinery/door) || !stuck) return diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index c5fadf4463..0ba28aa3cc 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -183,6 +183,14 @@ item_state = "blindfold" //vision_flags = BLIND // This flag is only supposed to be used if it causes permanent blindness, not temporary because of glasses +/obj/item/clothing/glasses/sunglasses/blindfold/tape + name = "length of tape" + desc = "It's a robust DIY blindfold!" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "tape_cross" + item_state = null + w_class = 1 + /obj/item/clothing/glasses/sunglasses/prescription name = "prescription sunglasses" prescription = 1 diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index c0b99d954a..f4cd0dbbc8 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -8,6 +8,14 @@ gas_transfer_coefficient = 0.90 voicechange = 1 +/obj/item/clothing/mask/muzzle/tape + name = "length of tape" + desc = "It's a robust DIY muzzle!" + icon = 'icons/obj/bureaucracy.dmi' + icon_state = "tape_cross" + item_state = null + w_class = 1 + /obj/item/clothing/mask/muzzle/New() ..() say_messages = list("Mmfph!", "Mmmf mrrfff!", "Mmmf mnnf!") diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm index bb0e27e73e..8b33f7a586 100644 --- a/code/modules/mob/living/carbon/resist.dm +++ b/code/modules/mob/living/carbon/resist.dm @@ -20,7 +20,7 @@ return ..() - + if(handcuffed) spawn() escape_handcuffs() else if(legcuffed) @@ -47,6 +47,11 @@ breakouttime = HC.breakouttime displaytime = breakouttime / 600 //Minutes + var/mob/living/carbon/human/H = src + if(istype(H) && H.gloves && istype(H.gloves,/obj/item/clothing/gloves/rig)) + breakouttime /= 2 + displaytime /= 2 + visible_message( "\The [src] attempts to remove \the [HC]!", "You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)" diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 22ab5327e2..5e6d56b219 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index 7928b24698..7ff6b43cb8 100644 Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 3a479f85d0..f8b7e566d3 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ