From c4c124c9b7c8a4601fad777d4322cf19489e362f Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Fri, 2 Feb 2024 21:06:39 +0100 Subject: [PATCH] [MIRROR] Gloves changes featuring nerfed shove cuffing (#26325) Gloves changes featuring nerfed shove cuffing (#81187) This PR increases cuff time to 4 seconds, but adds a trait for gloves that makes you cuff 1 second faster. Currently this is placed on black gloves, the captain's gloves and any other gloves which are used for combat (like krav maga, any tacklers, and combat gloves). Chameleon gloves also have this trait so that traitors have a glove choice other than the somewhat conspicuous combat gloves to help them with kidnapping, something they may do for objectives or contracting. It also makes nitrile and latex gloves hide your fingerprints once again. Latex gloves not hiding fingerprints was basically done purely for balance reasons to make them not a direct upgrade over black gloves, however it bothered me that this made little sense logically and is very unintuitive and not something that's easy to tell in game. I've personally arrested multiple people while playing sec using finger print evidence they didn't even realize I could possibly have because they thought their gloves would protect them. Also I don't like playing against shove cuffing, dying because you dared to stand within 1 tile of a wall or table and got shoved once is unfun and takes basically zero effort or preparation and is one of the most effective things you can do to fight someone, it discourages RP because literally anyone can just turn on combat mode, walk you into the wall while you're typing and kill you with nothing but a pair a cable cuffs. This will make it take a little more prep and make you a little more conspicuous when you intend to do it. :cl: add: Wearing certain gloves (such as black gloves and combat oriented gloves) allow you to cuff people faster balance: base handcuffing time is now 4 seconds balance: latex gloves now hide your fingerprints /:cl: Co-authored-by: SkeletalElite --- code/__DEFINES/traits/declarations.dm | 3 +++ code/_globalvars/traits/_traits.dm | 1 + code/_globalvars/traits/admin_tooling.dm | 1 + code/datums/martial/krav_maga.dm | 1 + code/game/objects/items/handcuffs.dm | 11 +++++++++-- .../chameleon/generic_chameleon_clothing.dm | 1 + code/modules/clothing/clothing.dm | 3 +++ code/modules/clothing/gloves/color.dm | 1 + code/modules/clothing/gloves/combat.dm | 1 + code/modules/clothing/gloves/special.dm | 3 ++- code/modules/clothing/gloves/tacklers.dm | 2 +- code/modules/mod/mod_types.dm | 17 +++++++++++++++++ code/modules/mod/modules/modules_security.dm | 14 ++++++++++++++ 13 files changed, 55 insertions(+), 4 deletions(-) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 0d01e3b920d..867f567be00 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -506,6 +506,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Sells for more money on the pirate bounty pad. #define TRAIT_HIGH_VALUE_RANSOM "high_value_ransom" +/// Makes the user handcuff others faster +#define TRAIT_FAST_CUFFING "fast_cuffing" + // METABOLISMS // Various jobs on the station have historically had better reactions // to various drinks and foodstuffs. Security liking donuts is a classic diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 82878b2dff1..b30073dd71c 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -195,6 +195,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_EXTROVERT" = TRAIT_EXTROVERT, "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, "TRAIT_FASTMED" = TRAIT_FASTMED, + "TRAIT_FAST_CUFFING" = TRAIT_FAST_CUFFING, "TRAIT_FAST_TYING" = TRAIT_FAST_TYING, "TRAIT_FAT" = TRAIT_FAT, "TRAIT_FEARLESS" = TRAIT_FEARLESS, diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 221d6ef820d..1043844ddf2 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -69,6 +69,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( "TRAIT_EMPATH" = TRAIT_EMPATH, "TRAIT_EXPANDED_FOV" = TRAIT_EXPANDED_FOV, "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, + "TRAIT_FAST_CUFFING" = TRAIT_FAST_CUFFING, "TRAIT_FAT" = TRAIT_FAT, "TRAIT_FEARLESS" = TRAIT_FEARLESS, "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index fcc432d41f8..40df1e201e6 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -158,6 +158,7 @@ /obj/item/clothing/gloves/krav_maga var/datum/martial_art/krav_maga/style = new + clothing_traits = list(TRAIT_FAST_CUFFING) /obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) . = ..() diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index d923d4258f0..e00a2aa61f3 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -46,7 +46,9 @@ throw_range = 5 custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 5) breakouttime = 1 MINUTES - var/handcuff_time = 3 SECONDS + var/handcuff_time = 4 SECONDS + ///Multiplier for handcuff time + var/handcuff_time_mod = 1 armor_type = /datum/armor/restraints_handcuffs custom_price = PAYCHECK_COMMAND * 0.35 ///Sound that plays when starting to put handcuffs on someone @@ -80,6 +82,11 @@ apply_cuffs(user,user) return + if(HAS_TRAIT(user, TRAIT_FAST_CUFFING)) + handcuff_time_mod = 0.75 + else + handcuff_time_mod = 1 + if(!C.handcuffed) if(C.canBeHandcuffed()) C.visible_message(span_danger("[user] is trying to put [src] on [C]!"), \ @@ -88,7 +95,7 @@ to_chat(C, span_userdanger("As you feel someone grab your wrists, [src] start digging into your skin!")) playsound(loc, cuffsound, 30, TRUE, -2) log_combat(user, C, "attempted to handcuff") - if(do_after(user, handcuff_time, C, timed_action_flags = IGNORE_SLOWDOWNS) && C.canBeHandcuffed()) + if(do_after(user, handcuff_time * handcuff_time_mod, C, timed_action_flags = IGNORE_SLOWDOWNS) && C.canBeHandcuffed()) if(iscyborg(user)) apply_cuffs(C, user, TRUE) else diff --git a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm index 492008d5348..f73b5b13da7 100644 --- a/code/modules/clothing/chameleon/generic_chameleon_clothing.dm +++ b/code/modules/clothing/chameleon/generic_chameleon_clothing.dm @@ -108,6 +108,7 @@ do { \ resistance_flags = NONE armor_type = /datum/armor/gloves_chameleon actions_types = list(/datum/action/item_action/chameleon/change/gloves) + clothing_traits = list(TRAIT_FAST_CUFFING) /obj/item/clothing/gloves/chameleon/broken diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 486f44f3504..107e13c2970 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -315,6 +315,9 @@ if (1601 to 35000) . += "[src] offers the wearer robust protection from fire." + if(TRAIT_FAST_CUFFING in clothing_traits) + . += "[src] increase the speed that you handcuff others." + for(var/zone in damage_by_parts) var/pct_damage_part = damage_by_parts[zone] / limb_integrity * 100 var/zone_name = parse_zone(zone) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index f77f6cc2c67..11230d18d37 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -9,6 +9,7 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE cut_type = /obj/item/clothing/gloves/fingerless + clothing_traits = list(TRAIT_FAST_CUFFING) // SKYRAT EDIT ADDITION START uses_advanced_reskins = TRUE unique_reskin = list( diff --git a/code/modules/clothing/gloves/combat.dm b/code/modules/clothing/gloves/combat.dm index e69813272d7..77030822716 100644 --- a/code/modules/clothing/gloves/combat.dm +++ b/code/modules/clothing/gloves/combat.dm @@ -11,6 +11,7 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE armor_type = /datum/armor/gloves_combat + clothing_traits = list(TRAIT_FAST_CUFFING) /datum/armor/gloves_combat bio = 90 diff --git a/code/modules/clothing/gloves/special.dm b/code/modules/clothing/gloves/special.dm index 74de42937e1..d7fb34ae7c7 100644 --- a/code/modules/clothing/gloves/special.dm +++ b/code/modules/clothing/gloves/special.dm @@ -88,6 +88,7 @@ strip_delay = 60 armor_type = /datum/armor/captain_gloves resistance_flags = NONE + clothing_traits = list(TRAIT_FAST_CUFFING) /datum/armor/captain_gloves bio = 90 @@ -102,7 +103,7 @@ greyscale_colors = null siemens_coefficient = 0.3 armor_type = /datum/armor/latex_gloves - clothing_traits = list(TRAIT_QUICK_CARRY, TRAIT_FINGERPRINT_PASSTHROUGH) + clothing_traits = list(TRAIT_QUICK_CARRY) resistance_flags = NONE /datum/armor/latex_gloves diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 986d8356b1a..a904cd0dd90 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -7,7 +7,7 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT resistance_flags = NONE custom_premium_price = PAYCHECK_COMMAND * 3.5 - clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH) + clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH,TRAIT_FAST_CUFFING) /// For storing our tackler datum so we can remove it after var/datum/component/tackler /// See: [/datum/component/tackler/var/stamina_cost] diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index 3bcd0751ce4..0933c7e8f18 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -164,6 +164,7 @@ /obj/item/mod/module/pepper_shoulders, /obj/item/mod/module/criminalcapture, /obj/item/mod/module/dispenser/mirage, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/safeguard @@ -177,6 +178,7 @@ /obj/item/mod/module/megaphone, /obj/item/mod/module/projectile_dampener, /obj/item/mod/module/pepper_shoulders, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/jetpack, @@ -191,6 +193,7 @@ /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/pathfinder, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/jetpack/advanced, @@ -217,6 +220,7 @@ /obj/item/mod/module/flashlight, /obj/item/mod/module/dna_lock, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -236,6 +240,7 @@ /obj/item/mod/module/flashlight, /obj/item/mod/module/dna_lock, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -256,6 +261,7 @@ /obj/item/mod/module/jump_jet, /obj/item/mod/module/flashlight, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -291,6 +297,7 @@ /obj/item/mod/module/jump_jet, /obj/item/mod/module/flashlight, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -309,6 +316,7 @@ /obj/item/mod/module/flashlight, /obj/item/mod/module/hat_stabilizer/syndicate, /obj/item/mod/module/flamethrower, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/armor_booster, @@ -327,6 +335,7 @@ /obj/item/mod/module/quick_carry, /obj/item/mod/module/visor/diaghud, /obj/item/mod/module/hat_stabilizer/syndicate, + /obj/item/mod/module/quick_cuff, ) @@ -343,6 +352,7 @@ /obj/item/mod/module/storage/syndicate, /obj/item/mod/module/hat_stabilizer/syndicate, /obj/item/mod/module/tether, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/enchanted @@ -353,6 +363,7 @@ /obj/item/mod/module/storage/large_capacity, /obj/item/mod/module/energy_shield/wizard, /obj/item/mod/module/emp_shield/advanced, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/ninja @@ -367,6 +378,7 @@ /obj/item/mod/module/dispenser/ninja, /obj/item/mod/module/dna_lock/reinforced, /obj/item/mod/module/emp_shield/pulse, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/stealth/ninja, @@ -404,6 +416,7 @@ /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/flashlight, + /obj/item/mod/module/quick_cuff, ) /// The insignia type, insignias show what sort of member of the ERT you're dealing with. var/insignia_type = /obj/item/mod/module/insignia @@ -454,6 +467,7 @@ /obj/item/mod/module/emp_shield, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/flashlight, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/responsory/inquisitory/commander @@ -483,6 +497,7 @@ /obj/item/mod/module/emp_shield/advanced, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/jetpack, @@ -496,6 +511,7 @@ /obj/item/mod/module/emp_shield/advanced, /obj/item/mod/module/magnetic_harness, /obj/item/mod/module/jetpack, + /obj/item/mod/module/quick_cuff, ) /obj/item/mod/control/pre_equipped/corporate @@ -559,6 +575,7 @@ /obj/item/mod/module/jetpack/advanced, /obj/item/mod/module/anomaly_locked/kinesis/admin, /obj/item/mod/module/shove_blocker, + /obj/item/mod/module/quick_cuff, ) default_pins = list( /obj/item/mod/module/stealth/ninja, diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 08ceb4a1bd9..c3b6998c5b5 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -597,3 +597,17 @@ desc = "Layers upon layers of shock dampening plates, just to stop you from getting shoved into a wall by an angry mob. Good luck removing this one." removable = FALSE complexity = 0 + +/obj/item/mod/module/quick_cuff + name = "MOD restraint assist module" + desc = "Enhanced gauntlent grip pads that help with placing individuals in restraints more quickly. Doesn't look like they'll come off." + removable = FALSE + complexity = 0 + +/obj/item/mod/module/quick_cuff/on_suit_activation() + . = ..() + ADD_TRAIT(mod.wearer, TRAIT_FAST_CUFFING, MOD_TRAIT) + +/obj/item/mod/module/quick_cuff/on_suit_deactivation(deleting = FALSE) + . = ..() + REMOVE_TRAIT(mod.wearer, TRAIT_FAST_CUFFING, MOD_TRAIT)