diff --git a/code/datums/components/crafting/recipes/recipes_clothing.dm b/code/datums/components/crafting/recipes/recipes_clothing.dm
index b9e3c379b4..6fc84409e4 100644
--- a/code/datums/components/crafting/recipes/recipes_clothing.dm
+++ b/code/datums/components/crafting/recipes/recipes_clothing.dm
@@ -39,6 +39,30 @@
time = 10
reqs = list(/obj/item/paper = 20)
category = CAT_CLOTHING
+
+/datum/crafting_recipe/armwraps
+ name = "armwraps"
+ result = /obj/item/clothing/gloves/fingerless/pugilist
+ time = 60
+ tools = list(TOOL_WIRECUTTER)
+ reqs = list(/obj/item/stack/sheet/cloth = 4,
+ /obj/item/stack/sheet/silk = 2,
+ /obj/item/stack/sheet/leather = 2)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/armwrapsplusone
+ name = "armwraps of mighty fists"
+ result = /obj/item/clothing/gloves/fingerless/pugilist/magic
+ time = 300
+ tools = list(TOOL_WIRECUTTER, /obj/item/book/codex_gigas, /obj/item/clothing/head/wizard, /obj/item/clothing/suit/wizrobe)
+ reqs = list(/obj/item/stack/sheet/cloth = 2,
+ /obj/item/stack/sheet/leather = 2,
+ /obj/item/stack/sheet/durathread = 2,
+ /datum/reagent/consumable/ethanol/sake = 100,
+ /datum/reagent/consumable/ethanol/wizz_fizz = 100,
+ /obj/item/stack/sheet/sinew = 1,
+ /obj/item/stack/sheet/mineral/gold = 50)
+ category = CAT_CLOTHING
////////
//Huds//
diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
index aa3f2d3969..b037f02f80 100644
--- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
+++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm
@@ -298,7 +298,7 @@
subcategory = CAT_AMMO
/datum/crafting_recipe/ashen_arrow
- name = "Fire Hardened Arrow"
+ name = "Ashen Arrow"
result = /obj/item/ammo_casing/caseless/arrow/ash
tools = list(TOOL_WELDER)
time = 30
diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm
index 39fac11129..4b19ae25ca 100644
--- a/code/datums/martial/cqc.dm
+++ b/code/datums/martial/cqc.dm
@@ -168,24 +168,29 @@
return FALSE
add_to_streak("D",D)
var/obj/item/I = null
- var/damage = (damage_roll(A,D)*0.5)
+ var/damage = damage_roll(A,D)
+ var/stunthreshold = A.dna.species.punchstunthreshold
if(check_streak(A,D))
return TRUE
- if(prob(65))
- if(CHECK_MOBILITY(D, MOBILITY_MOVE) || !restraining)
+ if(CHECK_MOBILITY(D, MOBILITY_MOVE) || !restraining)
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ if(damage >= stunthreshold)
I = D.get_active_held_item()
D.visible_message("[A] strikes [D]'s jaw with their hand!", \
- "[A] strikes your jaw, disorienting you!")
+ "[A] strikes your jaw, disorienting you!")
playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
- if(I && D.temporarilyRemoveItemFromInventory(I))
- A.put_in_hands(I)
+ D.drop_all_held_items()
D.Jitter(2)
- D.apply_damage(damage, BRUTE)
- else
- D.visible_message("[A] attempted to disarm [D]!", \
- "[A] attempted to disarm [D]!")
- playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- log_combat(A, D, "disarmed (CQC)", "[I ? " grabbing \the [I]" : ""]")
+ D.Dizzy(damage)
+ D.apply_damage(damage*2 + 20, STAMINA)
+ D.apply_damage(damage*0.5, BRUTE)
+ else
+ D.visible_message("[A] strikes [D] in the chest!", \
+ "[A] strikes in chest!")
+ playsound(D, 'sound/weapons/cqchit1.ogg', 25, 1, -1)
+ D.apply_damage(damage + 15, STAMINA)
+ D.apply_damage(damage*0.5, BRUTE)
+ log_combat(A, D, "disarmed (CQC)", "[I ? " grabbing \the [I]" : ""]")
if(restraining && A.pulling == D)
log_combat(A, D, "knocked out (Chokehold)(CQC)")
D.visible_message("[A] puts [D] into a chokehold!", \
diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm
index df42fba07d..6b3e2d3dc8 100644
--- a/code/datums/martial/krav_maga.dm
+++ b/code/datums/martial/krav_maga.dm
@@ -98,13 +98,13 @@
/datum/martial_art/krav_maga/proc/leg_sweep(mob/living/carbon/human/A, mob/living/carbon/human/D)
var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_CHEST)
var/armor_block = D.run_armor_check(affecting, "melee")
- var/damage = damage_roll(A,D)
+ var/damage = (damage_roll(A,D)*2 + 25)
if(!CHECK_MOBILITY(D, MOBILITY_STAND))
return FALSE
D.visible_message("[A] leg sweeps [D]!", \
"[A] leg sweeps you!")
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
- D.apply_damage(damage + 25, STAMINA, affecting, armor_block)
+ D.apply_damage(damage, STAMINA, affecting, armor_block)
D.DefaultCombatKnockdown(80, override_hardstun = 1, override_stamdmg = 0)
log_combat(A, D, "leg sweeped")
return TRUE
@@ -165,14 +165,15 @@
return TRUE
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
var/armor_block = D.run_armor_check(affecting, "melee")
- var/damage = (damage_roll(A,D)*2)
- if(D.mobility_flags & MOBILITY_STAND)
+ var/damage = damage_roll(A,D)
+ var/stunthreshold = A.dna.species.punchstunthreshold
+ if(CHECK_MOBILITY(D, MOBILITY_STAND))
D.visible_message("[A] reprimands [D]!", \
"You're slapped by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A)
to_chat(A, "You jab [D]!")
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
playsound(D, 'sound/effects/hit_punch.ogg', 50, TRUE, -1)
- D.apply_damage(damage + 5, STAMINA, affecting, armor_block)
+ D.apply_damage(damage*2 + 15, STAMINA, affecting, armor_block)
log_combat(A, D, "punched nonlethally")
else
D.visible_message("[A] reprimands [D]!", \
@@ -180,11 +181,12 @@
to_chat(A, "You stomp [D]!")
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
playsound(D, 'sound/effects/hit_punch.ogg', 50, TRUE, -1)
- D.apply_damage(damage + 10, STAMINA, affecting, armor_block)
+ D.apply_damage(damage*2 + 20, STAMINA, affecting, armor_block)
log_combat(A, D, "stomped nonlethally")
- if(prob(D.getStaminaLoss()))
+ if(damage >= stunthreshold)
D.visible_message("[D] sputters and recoils in pain!", "You recoil in pain as you are jabbed in a nerve!")
D.drop_all_held_items()
+
return TRUE
//Krav Maga Gloves
diff --git a/code/datums/martial/rising_bass.dm b/code/datums/martial/rising_bass.dm
index 2d760fc10a..4602d47f11 100644
--- a/code/datums/martial/rising_bass.dm
+++ b/code/datums/martial/rising_bass.dm
@@ -1,5 +1,5 @@
-#define REPULSE_PUNCH_COMBO "HDHD"
-#define SHOULDER_FLIP_COMBO "GHDGHH"
+#define REPULSE_PUNCH_COMBO "HDD"
+#define SHOULDER_FLIP_COMBO "DHDHG"
#define FOOT_SMASH_COMBO "HH"
#define SIDE_KICK_COMBO "skick"
#define DEFT_SWITCH_COMBO "deft"
@@ -37,7 +37,6 @@
return FALSE
-//Repulse Punch - Slams the opponent far away from you.
/datum/action/risingbassmove
name = ""
icon_icon = 'icons/mob/actions/actions_items.dmi'
@@ -89,7 +88,7 @@
"[A] kicks you in the side, forcing you to step away!")
playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST)
- D.DefaultCombatKnockdown(60)
+ D.DefaultCombatKnockdown(60, override_hardstun = 1, override_stam = damage)
var/L = !checkfordensity(H,D) ? (!checkfordensity(K,D) ? D.loc : K) : H
D.forceMove(L)
log_combat(A, D, "side kicked (Rising Bass)")
@@ -97,24 +96,25 @@
return TRUE
/datum/martial_art/the_rising_bass/proc/shoulderFlip(mob/living/carbon/human/A, mob/living/carbon/human/D)
- var/damage = (damage_roll(A,D) + 25)
- if(CHECK_MOBILITY(D, MOBILITY_STAND))
- var/turf/H = get_step(A, get_dir(D,A))
- var/L = checkfordensity(H,D) ? H : A.loc
- A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
- D.visible_message("[A] flips [D] over their shoulder, slamming them into the ground!", \
- "[A] flips you over their shoulder, slamming you into the ground!")
- playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- D.emote("scream")
- D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST)
- D.apply_damage(damage, BRUTE, BODY_ZONE_HEAD)
+ var/damage = damage_roll(A,D)
+ var/stunthreshold = A.dna.species.punchstunthreshold
+ var/turf/H = get_step(A, get_dir(D,A))
+ var/L = checkfordensity(H,D) ? H : A.loc
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ D.visible_message("[A] flips [D] over their shoulder, slamming them into the ground!", \
+ "[A] flips you over their shoulder, slamming you into the ground!")
+ playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ D.emote("scream")
+ D.apply_damage(damage + 10, BRUTE, BODY_ZONE_CHEST)
+ D.apply_damage(damage + 10, BRUTE, BODY_ZONE_HEAD)
+ if(damage >= stunthreshold)
D.Sleeping(60)
- D.DefaultCombatKnockdown(300)
- D.forceMove(L)
- log_combat(A, D, "shoulder flipped (Rising Bass)")
- return TRUE
- return FALSE
+ D.DefaultCombatKnockdown(300, override_hardstun = 1, override_stam = 50)
+ D.forceMove(L)
+ log_combat(A, D, "shoulder flipped (Rising Bass)")
+ return TRUE
+//Repulse Punch - Slams the opponent far away from you.
/datum/martial_art/the_rising_bass/proc/repulsePunch(mob/living/carbon/human/A, mob/living/carbon/human/D)
var/damage = damage_roll(A,D)
if(CHECK_MOBILITY(D, MOBILITY_STAND) && repulsecool < world.time)
@@ -125,7 +125,8 @@
var/atom/F = get_edge_target_turf(D, get_dir(A, get_step_away(D, A)))
D.throw_at(F, 10, 1)
D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST)
- D.DefaultCombatKnockdown(90)
+ D.DefaultCombatKnockdown(90, override_hardstun = 1, override_stam = damage*2)
+ D.confused += min(damage, 20)
log_combat(A, D, "repulse punched (Rising Bass)")
repulsecool = world.time + 3 SECONDS
return TRUE
@@ -162,7 +163,23 @@
add_to_streak("D",D)
if(check_streak(A,D))
return TRUE
- return ..()
+ var/damage = damage_roll(A,D)
+ var/stunthreshold = A.dna.species.punchstunthreshold
+ A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
+ if(CHECK_MOBILITY(D, MOBILITY_STAND) && damage >= stunthreshold)
+ D.visible_message("[A] trips [D]!", \
+ "You're tripped by [A]!", "You hear something thump against the floor!", COMBAT_MESSAGE_RANGE, A)
+ to_chat(A, "You trip [D]!")
+ D.DefaultCombatKnockdown(10, override_hardstun = 0.01, override_stam = damage)
+ D.Dizzy(damage)
+ else
+ D.visible_message("[A] jabs [D] in the stomach!", \
+ "You're jabbed in the stomach by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A)
+ to_chat(A, "You jab [D] in the stomach!")
+ D.apply_damage(damage*2 + 10, STAMINA)
+ D.disgust = min(damage, 20)
+ playsound(D, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ return TRUE
/datum/martial_art/the_rising_bass/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("H",D)
@@ -203,9 +220,9 @@
to_chat(usr, "You retreat inward and recall the teachings of the Rising Bass...")
to_chat(usr, "Side Kick: Forces opponent to step to the side.")
- to_chat(usr, "Shoulder Flip: Grab Harm Disarm Grab Harm Harm. Flips opponent over your shoulder and stuns.")
- to_chat(usr, "Repulse Punch: Harm Disarm Harm Disarm. Slams the opponent far away from you.")
- to_chat(usr, "Foot Smash: Harm Harm. Stuns opponent, minor damage.")
+ to_chat(usr, "Shoulder Flip: Disarm Harm Disarm Harm Grab. Flips opponent over your shoulder and stuns.")
+ to_chat(usr, "Repulse Punch: Harm Disarm Disarm. Slams the opponent far away from you.")
+ to_chat(usr, "Foot Smash: Harm Harm. Knocks opponent prone, minor damage.")
to_chat(usr, "Deft Switch: Switches the opponent's held item for your own. Most useful with nothing in your hand.")
/datum/martial_art/the_rising_bass/teach(mob/living/carbon/human/H, make_temporary = FALSE)
diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm
index 527ee01206..9a3f16351f 100644
--- a/code/datums/martial/sleeping_carp.dm
+++ b/code/datums/martial/sleeping_carp.dm
@@ -23,7 +23,7 @@
return TRUE
return FALSE
-///Gnashing Teeth: Harm Harm, consistent 20 force punch on every second harm punch, has a chance to crit
+///Gnashing Teeth: Harm Harm, high force punch on every second harm punch, has a chance to crit for near triple damage
/datum/martial_art/the_sleeping_carp/proc/strongPunch(mob/living/carbon/human/A, mob/living/carbon/human/D)
///this var is so that the strong punch is always aiming for the body part the user is targeting and not trying to apply to the chest before deviating
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
@@ -44,7 +44,7 @@
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1)
log_combat(A, D, "strong punched (Sleeping Carp)")//so as to not double up on logging
D.apply_damage((damage + 15) + crit_damage, BRUTE, affecting)
- return
+ return TRUE
///Crashing Wave Kick: Harm Disarm combo, throws people seven tiles backwards
/datum/martial_art/the_sleeping_carp/proc/launchKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
@@ -57,7 +57,7 @@
D.throw_at(throw_target, 7, 14, A)
D.apply_damage(damage, BRUTE, BODY_ZONE_CHEST)
log_combat(A, D, "launchkicked (Sleeping Carp)")
- return
+ return TRUE
///Keelhaul: Harm Grab combo, knocks people down, deals stamina damage while they're on the floor
/datum/martial_art/the_sleeping_carp/proc/dropKick(mob/living/carbon/human/A, mob/living/carbon/human/D)
@@ -77,7 +77,7 @@
D.visible_message("[A] kicks [D] in the head!", \
"You are kicked in the head by [A]!", "You hear a sickening sound of flesh hitting flesh!", COMBAT_MESSAGE_RANGE, A)
log_combat(A, D, "dropkicked (Sleeping Carp)")
- return
+ return TRUE
/datum/martial_art/the_sleeping_carp/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("G",D)
@@ -89,6 +89,7 @@
/datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("H",D)
var/damage = (damage_roll(A,D) + 5)
+ var/stunthreshold = A.dna.species.punchstunthreshold
if(check_streak(A,D))
return TRUE
var/obj/item/bodypart/affecting = D.get_bodypart(ran_zone(A.zone_selected))
@@ -99,6 +100,9 @@
to_chat(A, "You [atk_verb] [D]!")
D.apply_damage(damage, BRUTE, affecting)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 25, TRUE, -1)
+ if(CHECK_MOBILITY(D, MOBILITY_STAND) && damage >= stunthreshold)
+ to_chat(D, "You stumble and fall!")
+ D.DefaultCombatKnockdown(10, override_hardstun = 0.01, override_stam = damage)
log_combat(A, D, "punched (Sleeping Carp)")
return TRUE
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index f78a05244e..2d9880578c 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -55,7 +55,7 @@
/obj/item/stack/tile/fakespace/loaded = ARCADE_WEIGHT_TRICK,
/obj/item/stack/tile/fakepit/loaded = ARCADE_WEIGHT_TRICK,
/obj/item/restraints/handcuffs/fake = ARCADE_WEIGHT_TRICK,
- /obj/item/clothing/gloves/fingerless/pugilist/rapid/hug = ARCADE_WEIGHT_TRICK,
+ /obj/item/clothing/gloves/fingerless/pugilist/hug = ARCADE_WEIGHT_TRICK,
/obj/item/grenade/chem_grenade/glitter/pink = ARCADE_WEIGHT_TRICK,
/obj/item/grenade/chem_grenade/glitter/blue = ARCADE_WEIGHT_TRICK,
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index a37dc8b638..d537e2fb60 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -52,7 +52,7 @@
name = "armwraps of unyielding resolve"
desc = "A series of armwraps, soaked in holy water. Makes you pretty keen to smite evil magic users."
resistance_flags = FIRE_PROOF | ACID_PROOF
- enhancement = 1 //It is not magic that makes you punch harder, but force of will. Trust me.
+ enhancement = 2 //It is not magic that makes you punch harder, but force of will. Trust me.
secondary_trait = TRAIT_ANTIMAGIC
var/chaplain_spawnable = TRUE
@@ -115,14 +115,15 @@
if(input)
warcry = input
-/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug
+/obj/item/clothing/gloves/fingerless/pugilist/hug
name = "Hugs of the North Star"
desc = "The armbands of a humble friend. Makes you pretty keen to go let everyone know how much you appreciate them!"
- warcry = "owo" //Shouldn't ever come into play
+ icon_state = "rapid"
+ item_state = "rapid"
enhancement = 0
secondary_trait = TRAIT_PACIFISM //You are only here to hug and be friends!
-/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug/Touch(mob/target, proximity = TRUE)
+/obj/item/clothing/gloves/fingerless/pugilist/hug/Touch(mob/target, proximity = TRUE)
if(!isliving(target))
return
@@ -137,9 +138,6 @@
return FALSE
-/obj/item/clothing/gloves/fingerless/pugilist/rapid/hug/AltClick(mob/user)
- return FALSE
-
/obj/item/clothing/gloves/botanic_leather
name = "botanist's leather gloves"
desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm."
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index e39ce7d488..0d42bd036f 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1499,10 +1499,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases
if(user.dna.species.punchdamagelow)
+ if(HAS_TRAIT(user, TRAIT_PUGILIST)) //pugilists have a flat 10% miss chance
+ miss_chance = 10
if(atk_verb == ATTACK_EFFECT_KICK) //kicks never miss (provided your species deals more than 0 damage)
miss_chance = 0
else
- miss_chance = min(10 + ((puncherstam + puncherbrute)*0.5), 100) //probability of miss has a base of 10, and modified based on half your stamina and brute total. Capped at max 100 and min 0 to prevent weirdness in prob()
+ miss_chance = min(10 + ((puncherstam + puncherbrute)*0.5), 100) //probability of miss has a base of 10, and modified based on half brute total. Capped at max 100 to prevent weirdness in prob()
if(!damage || !affecting || prob(miss_chance))//future-proofing for species that have 0 damage/weird cases where no zone is targeted
playsound(target.loc, user.dna.species.miss_sound, 25, TRUE, -1)
@@ -1618,7 +1620,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
else
user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
- user.adjustStaminaLossBuffered(3) //CITADEL CHANGE - makes disarmspam cause staminaloss
+ if(HAS_TRAIT(user, TRAIT_PUGILIST))//CITADEL CHANGE - makes disarmspam cause staminaloss, pugilists can do it almost effortlessly
+ user.adjustStaminaLossBuffered(1)
+ else
+ user.adjustStaminaLossBuffered(3)
if(target.w_uniform)
target.w_uniform.add_fingerprint(user)
@@ -1647,8 +1652,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!(target.combat_flags & COMBAT_FLAG_COMBAT_ACTIVE)) //CITADEL CHANGE
randn += 25 //CITADEL CHANGE - Makes it harder to disarm outside of combat mode
if(user.pulling == target)
- randn += -20 //If you have the time to get someone in a grab, you should have a greater chance at snatching the thing in their hand. Will be made completely obsolete by the grab rework but i've got a poor track record for releasing big projects on time so w/e i guess
-
+ randn -= 20 //If you have the time to get someone in a grab, you should have a greater chance at snatching the thing in their hand. Will be made completely obsolete by the grab rework but i've got a poor track record for releasing big projects on time so w/e i guess
+ if(HAS_TRAIT(user, TRAIT_PUGILIST))
+ randn -= 25 //if you are a pugilist, you're slapping that item from them pretty reliably
+ if(HAS_TRAIT(target, TRAIT_PUGILIST))
+ randn += 25 //meanwhile, pugilists are less likely to get disarmed
+
if(randn <= 35)//CIT CHANGE - changes this back to a 35% chance to accomodate for the above being commented out in favor of right-click pushing
var/obj/item/I = null
if(target.pulling)