From 394657256caca8c4022f57eff19b0c133ca21497 Mon Sep 17 00:00:00 2001 From: SamCroswell Date: Mon, 21 Mar 2016 00:25:31 -0400 Subject: [PATCH 1/3] Traitor Garrote, Initial Commit --- code/game/objects/items/weapons/garrote.dm | 120 +++++++++++++++++++++ icons/obj/weapons.dmi | Bin 46516 -> 46891 bytes paradise.dme | 1 + 3 files changed, 121 insertions(+) create mode 100644 code/game/objects/items/weapons/garrote.dm diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm new file mode 100644 index 00000000000..bfd76ed0f97 --- /dev/null +++ b/code/game/objects/items/weapons/garrote.dm @@ -0,0 +1,120 @@ +/obj/item/weapon/twohanded/garrote + name = "fiber wire" + desc = "A length of razor-thin wire with a wooden handle on either end.
You suspect you'd have to be behind the target to use this weapon effectively." + icon_state = "garrot_wrap" + w_class = 1 + var/mob/living/carbon/human/strangling + +/obj/item/weapon/twohanded/garrote/update_icon() + if(strangling) // If we're strangling someone we want our icon to stay wielded + icon_state = "garrot_unwrap" + return + + icon_state = "garrot_[wielded ? "un" : ""]wrap" + +/obj/item/weapon/twohanded/garrote/wield(mob/living/carbon/user) + if(strangling) + user.visible_message("[user] removes the [src] from [strangling]'s neck.", \ + "You remove the [src] from [strangling]'s neck.") + + strangling = null + update_icon() + processing_objects.Remove(src) + + else + ..() + +/obj/item/weapon/twohanded/garrote/attack(mob/living/carbon/M as mob, mob/user as mob) + if(!wielded) + user << "You must use both hands to garrote [M]!" + return + + if(!istype(M, /mob/living/carbon/human)) + user << "You don't think that garroting [M] would be very effective..." + return + + if(M == user) + user << "You decide against strangling yourself for the time being." + + if(M.dir != user.dir) + user << "You cannot use [src] on [M] from that angle!" + return + + if(strangling) + user << "You cannot use [src] on two people at once!" + return + + unwield(user) + + if(!istype(user, /mob/living/carbon/human)) // spap_hand is a proc of /mob/living, user is simply /mob + return + var/mob/living/carbon/human/U = user + + U.swap_hand() // For whatever reason the grab will not properly work if we don't have the free hand active. + M.grabbedby(U, 1) + var/obj/item/weapon/grab/G = U.get_active_hand() + U.swap_hand() + + if(G && istype(G)) + G.state = GRAB_NECK + G.hud.icon_state = "kill" + G.hud.name = "kill" + + processing_objects.Add(src) + strangling = M + update_icon() + + playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1) + + M.visible_message("[user] comes from behind and begins garroting [M] with the [src]!", \ + "[user]\ begins garroting you with the [src]! You are unable to speak!", \ + "You hear struggling and wire strain against flesh!") + + return + +/obj/item/weapon/twohanded/garrote/process() + + if(!istype(loc, /mob/living/carbon/human)) + strangling = null + update_icon() + processing_objects.Remove(src) + return + + var/mob/living/carbon/human/user = loc + var/mob/living/carbon/human/target = strangling + var/obj/item/weapon/grab/G + + if(src == user.r_hand && istype(user.l_hand, /obj/item/weapon/grab)) + G = user.l_hand + + else if(src == user.l_hand && istype(user.r_hand, /obj/item/weapon/grab)) + G = user.r_hand + + else + user.visible_message("[user] loses his grip on [target]'s neck.", \ + "You lose your grip on [target]'s neck.") + + strangling = null + update_icon() + processing_objects.Remove(src) + + return + + if(!G.affecting) + user.visible_message("[user] loses his grip on [target]'s neck.", \ + "You lose your grip on [target]'s neck.") + + strangling = null + update_icon() + processing_objects.Remove(src) + + return + + strangling.silent += 1 + strangling.adjustOxyLoss(2) + strangling.apply_damage(2, BRUTE, "head", sharp = 1, edge = 1, used_weapon = "Razor Wire") // Razor sharp wire, causes bleeding in the neck but only if the head is unarmored. + +/obj/item/weapon/twohanded/garrote/suicide_act(mob/user) + user.visible_message("[user] is wrapping the [src] around \his neck and pulling the handles! It looks like \he's trying to commit suicide.") + playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1) + return (OXYLOSS) \ No newline at end of file diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 892dfe2a64e9b8b57fc1aa3f31f45ce61b6f3531..e56f92a7cc1f824b04ed9774221e1e4676680f87 100644 GIT binary patch delta 5114 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 delta 4736 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 Date: Mon, 21 Mar 2016 20:31:55 -0400 Subject: [PATCH 2/3] Garrotes, Commit 2 --- code/datums/uplink_item.dm | 8 ++ code/game/objects/items/weapons/garrote.dm | 90 +++++++++++++++------ code/modules/crafting/recipes.dm | 10 ++- icons/obj/weapons.dmi | Bin 46891 -> 47616 bytes 4 files changed, 83 insertions(+), 25 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 803c1c0399d..9471954e314 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -518,6 +518,14 @@ var/list/uplink_items = list() /datum/uplink_item/stealthy_weapons category = "Stealthy and Inconspicuous Weapons" +/datum/uplink_item/stealthy_weapons/garrote + name = "Fiber Wire Garrote" + desc = "A length of fiber wire between two wooden handles, perfect for the discrete assassin. This weapon, when used on a target from behind \ + will instantly put them in your grasp and silence them, as well as causing rapid suffocation. Does not work on those who do not need to breathe." + reference = "GAR" + item = /obj/item/weapon/twohanded/garrote + cost = 12 + /datum/uplink_item/stealthy_weapons/martialarts name = "Martial Arts Scroll" desc = "This scroll contains the secrets of an ancient martial arts technique. You will master unarmed combat, \ diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index bfd76ed0f97..00140497b49 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -1,9 +1,17 @@ -/obj/item/weapon/twohanded/garrote +/* + * Contains: + * Traitor fiber wire + * Improvised garrotes + */ + +/obj/item/weapon/twohanded/garrote // 12TC traitor item name = "fiber wire" - desc = "A length of razor-thin wire with a wooden handle on either end.
You suspect you'd have to be behind the target to use this weapon effectively." + desc = "A length of razor-thin wire with an elegant wooden handle on either end.
You suspect you'd have to be behind the target to use this weapon effectively." icon_state = "garrot_wrap" w_class = 1 var/mob/living/carbon/human/strangling + var/improvised = 0 + var/garrote_time /obj/item/weapon/twohanded/garrote/update_icon() if(strangling) // If we're strangling someone we want our icon to stay wielded @@ -12,9 +20,22 @@ icon_state = "garrot_[wielded ? "un" : ""]wrap" +/obj/item/weapon/twohanded/garrote/improvised // Made via tablecrafting + name = "garrote" + desc = "A length of cable with a shoddily-carved wooden handle tied to either end.
You suspect you'd have to be behind the target to use this weapon effectively." + icon_state = "garrot_I_wrap" + improvised = 1 + +/obj/item/weapon/twohanded/garrote/improvised/update_icon() + if(strangling) + icon_state = "garrot_I_unwrap" + return + + icon_state = "garrot_I_[wielded ? "un" : ""]wrap" + /obj/item/weapon/twohanded/garrote/wield(mob/living/carbon/user) if(strangling) - user.visible_message("[user] removes the [src] from [strangling]'s neck.", \ + user.visible_message("[user] removes the [src] from [strangling]'s neck.", \ "You remove the [src] from [strangling]'s neck.") strangling = null @@ -25,6 +46,14 @@ ..() /obj/item/weapon/twohanded/garrote/attack(mob/living/carbon/M as mob, mob/user as mob) + if(garrote_time > world.time) // Cooldown + return + + if(!istype(user, /mob/living/carbon/human)) // spap_hand is a proc of /mob/living, user is simply /mob + return + + var/mob/living/carbon/human/U = user + if(!wielded) user << "You must use both hands to garrote [M]!" return @@ -33,22 +62,22 @@ user << "You don't think that garroting [M] would be very effective..." return - if(M == user) - user << "You decide against strangling yourself for the time being." + if(M == U) + U.suicide() // This will display a prompt for confirmation first. + return - if(M.dir != user.dir) + if(M.dir != U.dir) user << "You cannot use [src] on [M] from that angle!" return + if(improvised && ((M.head && (M.head.flags & HEADCOVERSMOUTH)) || (M.wear_mask && (M.wear_mask.flags & MASKCOVERSMOUTH)))) // Improvised garrotes are blocked by mouth-covering items. + user << "[M]'s neck is blocked by something they're wearing!" + if(strangling) user << "You cannot use [src] on two people at once!" return - unwield(user) - - if(!istype(user, /mob/living/carbon/human)) // spap_hand is a proc of /mob/living, user is simply /mob - return - var/mob/living/carbon/human/U = user + unwield(U) U.swap_hand() // For whatever reason the grab will not properly work if we don't have the free hand active. M.grabbedby(U, 1) @@ -56,18 +85,23 @@ U.swap_hand() if(G && istype(G)) - G.state = GRAB_NECK - G.hud.icon_state = "kill" - G.hud.name = "kill" + if(improvised) // Improvised garrotes start you off with a passive grab, but keep you stunned like an agressive grab. + M.Stun(4) + else + G.state = GRAB_NECK + G.hud.icon_state = "kill" + G.hud.name = "kill" + M.silent += 1 + garrote_time = world.time + 10 processing_objects.Add(src) strangling = M update_icon() playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1) - M.visible_message("[user] comes from behind and begins garroting [M] with the [src]!", \ - "[user]\ begins garroting you with the [src]! You are unable to speak!", \ + M.visible_message("[U] comes from behind and begins garroting [M] with the [src]!", \ + "[U]\ begins garroting you with the [src]![improvised ? "" : " You are unable to speak!"]", \ "You hear struggling and wire strain against flesh!") return @@ -81,7 +115,6 @@ return var/mob/living/carbon/human/user = loc - var/mob/living/carbon/human/target = strangling var/obj/item/weapon/grab/G if(src == user.r_hand && istype(user.l_hand, /obj/item/weapon/grab)) @@ -91,8 +124,8 @@ G = user.r_hand else - user.visible_message("[user] loses his grip on [target]'s neck.", \ - "You lose your grip on [target]'s neck.") + user.visible_message("[user] loses his grip on [strangling]'s neck.", \ + "You lose your grip on [strangling]'s neck.") strangling = null update_icon() @@ -101,8 +134,8 @@ return if(!G.affecting) - user.visible_message("[user] loses his grip on [target]'s neck.", \ - "You lose your grip on [target]'s neck.") + user.visible_message("[user] loses his grip on [strangling]'s neck.", \ + "You lose your grip on [strangling]'s neck.") strangling = null update_icon() @@ -110,9 +143,18 @@ return - strangling.silent += 1 - strangling.adjustOxyLoss(2) - strangling.apply_damage(2, BRUTE, "head", sharp = 1, edge = 1, used_weapon = "Razor Wire") // Razor sharp wire, causes bleeding in the neck but only if the head is unarmored. + if(G.state < GRAB_NECK) // Only possible with improvised garrotes, essentially this will stun people as if they were aggressively grabbed. Allows for resisting out if you're quick, but not running away. + strangling.Stun(4) + + if(improvised) + strangling.stuttering = max(strangling.stuttering, 3) + strangling.apply_damage(2, OXY, "head") + return + + + strangling.silent = max(strangling.silent, 3) // Non-improvised effects + strangling.apply_damage(4, OXY, "head") + /obj/item/weapon/twohanded/garrote/suicide_act(mob/user) user.visible_message("[user] is wrapping the [src] around \his neck and pulling the handles! It looks like \he's trying to commit suicide.") diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index fa0a59010d4..db39efa3845 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -192,4 +192,12 @@ result = /obj/item/weapon/soap/ducttape time = 100 reqs = list(/obj/item/stack/tape_roll = 1, - /datum/reagent/liquidgibs = 10) \ No newline at end of file + /datum/reagent/liquidgibs = 10) + +/datum/table_recipe/garrote + name = "Makeshift Garrote" + result = /obj/item/weapon/twohanded/garrote/improvised + time = 15 + reqs = list(/obj/item/stack/sheet/wood = 1, + /obj/item/stack/cable_coil = 5) + tools = list(/obj/item/weapon/kitchen/knife) // Gotta carve the wood into handles \ No newline at end of file diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index e56f92a7cc1f824b04ed9774221e1e4676680f87..728bfaba198f4c5ccacf595db07e583d702f6465 100644 GIT binary patch delta 5509 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 XXrH^+d&eaEJObXgSePy delta 4778 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 Date: Mon, 21 Mar 2016 23:07:19 -0400 Subject: [PATCH 3/3] Stun Value Adjustments --- code/game/objects/items/weapons/garrote.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index 00140497b49..80114bd5dd7 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -86,7 +86,7 @@ if(G && istype(G)) if(improvised) // Improvised garrotes start you off with a passive grab, but keep you stunned like an agressive grab. - M.Stun(4) + M.Stun(1) else G.state = GRAB_NECK G.hud.icon_state = "kill" @@ -144,7 +144,7 @@ return if(G.state < GRAB_NECK) // Only possible with improvised garrotes, essentially this will stun people as if they were aggressively grabbed. Allows for resisting out if you're quick, but not running away. - strangling.Stun(4) + strangling.Stun(3) if(improvised) strangling.stuttering = max(strangling.stuttering, 3)