Garrotes, Commit 2

This commit is contained in:
SamCroswell
2016-03-21 20:31:55 -04:00
parent 394657256c
commit f983245c3f
4 changed files with 83 additions and 25 deletions
+8
View File
@@ -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, \
+66 -24
View File
@@ -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.<br>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.<br>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.<br>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("<span class='warning'>[user] removes the [src] from [strangling]'s neck.</span>", \
user.visible_message("<span class='info'>[user] removes the [src] from [strangling]'s neck.</span>", \
"<span class='warning'>You remove the [src] from [strangling]'s neck.</span>")
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 << "<span class = 'warning'>You must use both hands to garrote [M]!</span>"
return
@@ -33,22 +62,22 @@
user << "<span class = 'warning'>You don't think that garroting [M] would be very effective...</span>"
return
if(M == user)
user << "<span class = 'info'>You decide against strangling yourself for the time being.</span>"
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 << "<span class='warning'>You cannot use [src] on [M] from that angle!</span>"
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 << "<span class = 'warning'>[M]'s neck is blocked by something they're wearing!</span>"
if(strangling)
user << "<span class = 'warning'>You cannot use [src] on two people at once!</span>"
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("<span class='danger'>[user] comes from behind and begins garroting [M] with the [src]!</span>", \
"<span class='userdanger'>[user]\ begins garroting you with the [src]! You are unable to speak!</span>", \
M.visible_message("<span class='danger'>[U] comes from behind and begins garroting [M] with the [src]!</span>", \
"<span class='userdanger'>[U]\ begins garroting you with the [src]![improvised ? "" : " You are unable to speak!"]</span>", \
"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("<span class='warning'>[user] loses his grip on [target]'s neck.</span>", \
"<span class='warning'>You lose your grip on [target]'s neck.</span>")
user.visible_message("<span class='warning'>[user] loses his grip on [strangling]'s neck.</span>", \
"<span class='warning'>You lose your grip on [strangling]'s neck.</span>")
strangling = null
update_icon()
@@ -101,8 +134,8 @@
return
if(!G.affecting)
user.visible_message("<span class='warning'>[user] loses his grip on [target]'s neck.</span>", \
"<span class='warning'>You lose your grip on [target]'s neck.</span>")
user.visible_message("<span class='warning'>[user] loses his grip on [strangling]'s neck.</span>", \
"<span class='warning'>You lose your grip on [strangling]'s neck.</span>")
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("<span class='suicide'>[user] is wrapping the [src] around \his neck and pulling the handles! It looks like \he's trying to commit suicide.</span>")
+9 -1
View File
@@ -192,4 +192,12 @@
result = /obj/item/weapon/soap/ducttape
time = 100
reqs = list(/obj/item/stack/tape_roll = 1,
/datum/reagent/liquidgibs = 10)
/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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB