G2ar4sd@Ie9CpfP~m{
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
literal 0
HcmV?d00001
diff --git a/tgstation.dme b/tgstation.dme
index d56d8489cc..b557a75627 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -415,6 +415,7 @@
#include "code\datums\components\stationloving.dm"
#include "code\datums\components\summoning.dm"
#include "code\datums\components\swarming.dm"
+#include "code\datums\components\tackle.dm"
#include "code\datums\components\tactical.dm"
#include "code\datums\components\thermite.dm"
#include "code\datums\components\uplink.dm"
@@ -1722,6 +1723,7 @@
#include "code\modules\clothing\gloves\color.dm"
#include "code\modules\clothing\gloves\miscellaneous.dm"
#include "code\modules\clothing\gloves\ring.dm"
+#include "code\modules\clothing\gloves\tacklers.dm"
#include "code\modules\clothing\head\_head.dm"
#include "code\modules\clothing\head\beanie.dm"
#include "code\modules\clothing\head\cit_hats.dm"
From 1ffea14ee88288e99c24ab97436f03252a0ff0be Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Thu, 9 Apr 2020 19:53:14 +0100
Subject: [PATCH 12/60] makes descriptions work
---
code/modules/food_and_drinks/food/snacks.dm | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index 92f8d104a6..889ec42185 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -153,6 +153,12 @@ All foods are distributed among various categories. Use common sense.
/obj/item/reagent_containers/food/snacks/examine(mob/user)
. = ..()
+ if(food_quality >= 70)
+ . += "It is of a high quality."
+ else
+ if(food_quality <= 30)
+ . += "It is of a low quality."
+
if(bitecount == 0)
return
else if(bitecount == 1)
@@ -162,13 +168,6 @@ All foods are distributed among various categories. Use common sense.
else
. += "[src] was bitten multiple times!"
- //examine text for quality
- if(food_quality >= 70)
- . += "It is of a high quality."
- else
- if(food_quality <= 30)
- . += "It is of a low quality."
-
/obj/item/reagent_containers/food/snacks/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/storage))
From 951732c36132490ac7b6e9f0813b1149300bac7d Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Thu, 9 Apr 2020 20:12:02 +0100
Subject: [PATCH 13/60] make secret sauce work on customizables
---
code/modules/reagents/chemistry/reagents/food_reagents.dm | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index c555609992..cf6c3789ec 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -782,7 +782,11 @@
if(reac_volume >= 1 && istype(O, /obj/item/reagent_containers/food))
var/obj/item/reagent_containers/food/splashed_food = O
splashed_food.adjust_food_quality(100)
-
+ // if it's a customisable food, we need to edit its total quality too, to prevent its quality resetting from adding more ingredients!
+ if(istype(O, obj/item/reagent_containers/food/customizable))
+ var/obj/item/reagent_containers/food/customizable/splashed_custom_food = O
+ splashed_custom_food.total_quality += 10000
+r
/datum/reagent/consumable/char
name = "Char"
description = "Essence of the grill. Has strange properties when overdosed."
From 4c4e11037522b6eb04dd635b6d354145bedb3d4a Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Thu, 9 Apr 2020 20:16:55 +0100
Subject: [PATCH 14/60] imagine making it compile
---
code/modules/reagents/chemistry/reagents/food_reagents.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index cf6c3789ec..654d69a599 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -783,8 +783,8 @@
var/obj/item/reagent_containers/food/splashed_food = O
splashed_food.adjust_food_quality(100)
// if it's a customisable food, we need to edit its total quality too, to prevent its quality resetting from adding more ingredients!
- if(istype(O, obj/item/reagent_containers/food/customizable))
- var/obj/item/reagent_containers/food/customizable/splashed_custom_food = O
+ if(istype(O, /obj/item/reagent_containers/food/snacks/customizable))
+ var/obj/item/reagent_containers/food/snacks/customizable/splashed_custom_food = O
splashed_custom_food.total_quality += 10000
r
/datum/reagent/consumable/char
From ea8d43281ebf2c788cfe43446854810598de504d Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Fri, 10 Apr 2020 03:21:06 +0100
Subject: [PATCH 15/60] swap & for &&
woops
Co-Authored-By: Lin
---
code/modules/food_and_drinks/food.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm
index beaf5ed1ba..203eb3eef6 100644
--- a/code/modules/food_and_drinks/food.dm
+++ b/code/modules/food_and_drinks/food.dm
@@ -40,7 +40,7 @@
to_chat(H,"That didn't taste very good...")
H.adjust_disgust(11 + 15 * fraction)
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food)
- else if((foodtype & H.dna.species.liked_food & food_quality >= 50) || food_quality >= 70) //you like food of high quality, and food of regular quality you have a preference for
+ else if(((foodtype & H.dna.species.liked_food) && food_quality >= 50) || food_quality >= 70) //you like food of high quality, and food of regular quality you have a preference for
to_chat(H,"I love this taste!")
H.adjust_disgust(-5 + (-2.5 * food_quality/50) + -2.5 * fraction)
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food)
@@ -52,4 +52,4 @@
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast)
last_check_time = world.time
-#undef STOP_SERVING_BREAKFAST
\ No newline at end of file
+#undef STOP_SERVING_BREAKFAST
From f481be14968a80330ea50debef067a91563d369e Mon Sep 17 00:00:00 2001
From: Artur
Date: Fri, 10 Apr 2020 20:53:28 +0300
Subject: [PATCH 16/60] Makin stuff nice and dandy
---
code/__DEFINES/dcs/signals.dm | 2 +-
code/datums/components/tackle.dm | 40 ++++++++-----------
.../antagonists/bloodsucker/powers/lunge.dm | 28 ++++++++-----
code/modules/mob/living/carbon/carbon.dm | 4 +-
.../mob/living/carbon/carbon_defines.dm | 1 +
5 files changed, 41 insertions(+), 34 deletions(-)
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 70c2425f48..5f08bd21a1 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -214,7 +214,7 @@
// /mob/living/carbon signals
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
#define COMSIG_CARBON_IDENTITY_TRANSFERRED_TO "carbon_id_transferred_to" //from datum/dna/transfer_identity(): (datum/dna, transfer_SE)
-
+#define COMSIG_CARBON_TACKLED "carbon_tackled" //sends from tackle.dm on tackle completion
// /mob/living/simple_animal/hostile signals
#define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget"
#define COMPONENT_HOSTILE_NO_ATTACK 1
diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm
index 28dd469041..17d2773b60 100644
--- a/code/datums/components/tackle.dm
+++ b/code/datums/components/tackle.dm
@@ -14,9 +14,6 @@
*/
/datum/component/tackler
dupe_mode = COMPONENT_DUPE_UNIQUE
-
- ///If we're currently tackling or are on cooldown. Actually, shit, if I use this to handle cooldowns, then getting thrown by something while on cooldown will count as a tackle..... whatever, i'll fix that next commit
- var/tackling = TRUE
///How much stamina it takes to launch a tackle
var/stamina_cost
///Launching a tackle calls Knockdown on you for this long, so this is your cooldown. Once you stand back up, you can tackle again.
@@ -43,14 +40,15 @@
src.skill_mod = skill_mod
src.min_distance = min_distance
- var/mob/P = parent
+ var/mob/living/carbon/P = parent
to_chat(P, "You are now able to launch tackles! You can do so by activating throw intent, and clicking on your target with an empty hand.")
-
+ P.tackling = TRUE
addtimer(CALLBACK(src, .proc/resetTackle), base_knockdown, TIMER_STOPPABLE)
/datum/component/tackler/Destroy()
- var/mob/P = parent
+ var/mob/living/carbon/P = parent
to_chat(P, "You can no longer tackle.")
+ P.tackling = FALSE
..()
/datum/component/tackler/RegisterWithParent()
@@ -82,12 +80,12 @@
to_chat(user, "You must be standing to tackle!")
return
- if(tackling)
+ if(user.tackling)
to_chat(user, "You're not ready to tackle!")
return
- if(user.has_movespeed_modifier(MOVESPEED_ID_SHOVE)) // can't tackle if you just got shoved
- to_chat(user, "You're too off balance to tackle!")
+ if(user.has_status_effect(STATUS_EFFECT_TASED)) // can't tackle if you just got shoved
+ to_chat(user, "You cant tackle while you are tased!")
return
user.face_atom(A)
@@ -96,7 +94,7 @@
if(modifiers["alt"] || modifiers["shift"] || modifiers["ctrl"] || modifiers["middle"])
return
- tackling = TRUE
+ user.tackling = TRUE
RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/checkObstacle)
playsound(user, 'sound/weapons/thudswoosh.ogg', 40, TRUE, -1)
@@ -136,7 +134,7 @@
* Finally, we return a bitflag to [COMSIG_MOVABLE_IMPACT] that forces the hitpush to false so that we don't knock them away.
*/
/datum/component/tackler/proc/sack(mob/living/carbon/user, atom/hit)
- if(!tackling || !tackle)
+ if(!user.tackling || !tackle)
return
if(!iscarbon(hit))
@@ -149,13 +147,12 @@
var/mob/living/carbon/human/S = user
var/roll = rollTackle(target)
- tackling = FALSE
+ user.tackling = FALSE
switch(roll)
if(-INFINITY to -5)
user.visible_message("[user] botches [user.p_their()] tackle and slams [user.p_their()] head into [target], knocking [user.p_them()]self silly!", "You botch your tackle and slam your head into [target], knocking yourself silly!", target)
to_chat(target, "[user] botches [user.p_their()] tackle and slams [user.p_their()] head into you, knocking [user.p_them()]self silly!")
-
user.Paralyze(30)
var/obj/item/bodypart/head/hed = user.get_bodypart(BODY_ZONE_HEAD)
if(hed)
@@ -165,11 +162,8 @@
if(-4 to -2) // glancing blow at best
user.visible_message("[user] lands a weak tackle on [target], briefly knocking [target.p_them()] off-balance!", "You land a weak tackle on [target], briefly knocking [target.p_them()] off-balance!", target)
to_chat(target, "[user] lands a weak tackle on you, briefly knocking you off-balance!")
-
user.Knockdown(30)
- if(ishuman(target) && !T.has_movespeed_modifier(MOVESPEED_ID_SHOVE))
- T.add_movespeed_modifier(MOVESPEED_ID_SHOVE, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH) // maybe define a slightly more severe/longer slowdown for this
- addtimer(CALLBACK(T, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
+ target.apply_status_effect(STATUS_EFFECT_TASED_WEAK, 6 SECONDS)
if(-1 to 0) // decent hit, both parties are about equally inconvenienced
user.visible_message("[user] lands a passable tackle on [target], sending them both tumbling!", "You land a passable tackle on [target], sending you both tumbling!", target)
@@ -183,7 +177,6 @@
if(1 to 2) // solid hit, tackler has a slight advantage
user.visible_message("[user] lands a solid tackle on [target], knocking them both down hard!", "You land a solid tackle on [target], knocking you both down hard!", target)
to_chat(target, "[user] lands a solid tackle on you, knocking you both down hard!")
-
target.adjustStaminaLoss(30)
target.Paralyze(5)
user.Knockdown(10)
@@ -192,8 +185,8 @@
if(3 to 4) // really good hit, the target is definitely worse off here. Without positive modifiers, this is as good a tackle as you can land
user.visible_message("[user] lands an expert tackle on [target], knocking [target.p_them()] down hard while landing on [user.p_their()] feet with a passive grip!", "You land an expert tackle on [target], knocking [target.p_them()] down hard while landing on your feet with a passive grip!", target)
to_chat(target, "[user] lands an expert tackle on you, knocking you down hard and maintaining a passive grab!")
-
user.SetKnockdown(0)
+ user.set_resting(FALSE, TRUE, FALSE)
user.forceMove(get_turf(target))
target.adjustStaminaLoss(40)
target.Paralyze(5)
@@ -205,8 +198,8 @@
if(5 to INFINITY) // absolutely BODIED
user.visible_message("[user] lands a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target)
to_chat(target, "[user] lands a monster tackle on you, knocking you senseless and aggressively pinning you!")
-
user.SetKnockdown(0)
+ user.set_resting(FALSE, TRUE, FALSE)
user.forceMove(get_turf(target))
target.adjustStaminaLoss(40)
target.Paralyze(5)
@@ -215,7 +208,7 @@
S.dna.species.grab(S, T)
S.setGrabState(GRAB_AGGRESSIVE)
-
+ SEND_SIGNAL(user, COMSIG_CARBON_TACKLED, "tackle completed")
return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH
/**
@@ -405,7 +398,8 @@
/datum/component/tackler/proc/resetTackle()
- tackling = FALSE
+ var/mob/living/carbon/P = parent
+ P.tackling = FALSE
QDEL_NULL(tackle)
UnregisterSignal(parent, COMSIG_MOVABLE_MOVED)
@@ -441,7 +435,7 @@
///Check to see if we hit a table, and if so, make a big mess!
/datum/component/tackler/proc/checkObstacle(mob/living/carbon/owner)
- if(!tackling)
+ if(!owner.tackling)
return
var/turf/T = get_turf(owner)
diff --git a/code/modules/antagonists/bloodsucker/powers/lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm
index e1e8f4363a..d40627f493 100644
--- a/code/modules/antagonists/bloodsucker/powers/lunge.dm
+++ b/code/modules/antagonists/bloodsucker/powers/lunge.dm
@@ -2,27 +2,37 @@
/datum/action/bloodsucker/lunge
name = "Predatory Lunge"
- desc = "Spring at your target and aggressively grapple them without warning. Attacks from concealment or the rear may even knock them down."
+ desc = "Prepare the strenght to grapple your prey."
button_icon_state = "power_lunge"
bloodcost = 10
cooldown = 30
bloodsucker_can_buy = TRUE
warn_constant_cost = TRUE
amToggle = TRUE
+ var/leap_skill_mod = 5
+
+/datum/action/bloodsucker/lunge/New()
+ . = ..()
+ RegisterSignal(owner, COMSIG_CARBON_TACKLED, .proc/Delayed_DeactivatePower)
/datum/action/bloodsucker/lunge/ActivatePower()
var/mob/living/user = owner
var/datum/antagonist/bloodsucker/B = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
- user.LoadComponent(/datum/component/tackler, stamina_cost = 50, base_knockdown = 3 SECONDS, range = 4, speed = 0.8, skill_mod = 5, min_distance = 2)
+ var/datum/component/tackler/T = user.LoadComponent(/datum/component/tackler)
+ T.stamina_cost = 50
+ T.base_knockdown = 3 SECONDS
+ T.range = 4
+ T.speed = 0.8
+ T.skill_mod = 5
+ T.min_distance = 2
active = TRUE
- while(B && ContinueActive(user) && CHECK_MOBILITY(user, MOBILITY_STAND))
+ while(B && ContinueActive(user))
B.AddBloodVolume(-0.1)
sleep(5)
-
-/datum/action/bloodsucker/lunge/ContinueActive(mob/living/user)
- return ..()
+
+/datum/action/bloodsucker/lunge/proc/Delayed_DeactivatePower()
+ addtimer(CALLBACK(src, .proc/DeactivatePower), 1 SECONDS, TIMER_UNIQUE)
/datum/action/bloodsucker/lunge/DeactivatePower(mob/living/user = owner)
- ..() // activate = FALSE
- var/datum/component/tackler
- tackler.RemoveComponent()
+ . = ..()
+ qdel(user.GetComponent(/datum/component/tackler))
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index cb3833b7f6..dcaa1e5b8c 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -98,6 +98,8 @@
/mob/living/carbon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
var/hurt = TRUE
+ if(src.GetComponent(/datum/component/tackler))
+ return
if(throwingdatum?.thrower && iscyborg(throwingdatum.thrower))
var/mob/living/silicon/robot/R = throwingdatum.thrower
if(!R.emagged)
@@ -110,7 +112,7 @@
var/mob/living/carbon/victim = hit_atom
if(victim.movement_type & FLYING)
return
- if(hurt && !GetComponent(/datum/component/tackler))
+ if(hurt)
victim.take_bodypart_damage(10)
take_bodypart_damage(10)
victim.DefaultCombatKnockdown(20)
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 689ab56842..15413f76d4 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -63,3 +63,4 @@
var/damageoverlaytemp = 0
var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects
+ var/tackling = FALSE //Whether or not we are tackling, this will prevent the knock into effects for carbons
From 38d1634e13905096dac34764da7026822901c286 Mon Sep 17 00:00:00 2001
From: Artur
Date: Fri, 10 Apr 2020 21:07:15 +0300
Subject: [PATCH 17/60] Weh
---
code/datums/components/tackle.dm | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm
index 17d2773b60..0af2d8f78c 100644
--- a/code/datums/components/tackle.dm
+++ b/code/datums/components/tackle.dm
@@ -168,7 +168,6 @@
if(-1 to 0) // decent hit, both parties are about equally inconvenienced
user.visible_message("[user] lands a passable tackle on [target], sending them both tumbling!", "You land a passable tackle on [target], sending you both tumbling!", target)
to_chat(target, "[user] lands a passable tackle on you, sending you both tumbling!")
-
target.adjustStaminaLoss(stamina_cost)
target.Paralyze(5)
user.Knockdown(20)
@@ -205,8 +204,8 @@
target.Paralyze(5)
target.Knockdown(30)
if(ishuman(target) && ishuman(user))
- S.dna.species.grab(S, T)
- S.setGrabState(GRAB_AGGRESSIVE)
+ target.grabbedby(user)
+ target.grippedby(user, instant = TRUE) //instant aggro grab
SEND_SIGNAL(user, COMSIG_CARBON_TACKLED, "tackle completed")
return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH
From e02439396266570b1e64fe2d4b41148c2c0a5526 Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Mon, 13 Apr 2020 17:12:40 +0100
Subject: [PATCH 18/60] secret sauce doesn't give a second moodlet because
that's dumb
---
code/modules/reagents/chemistry/reagents/food_reagents.dm | 3 ---
1 file changed, 3 deletions(-)
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 654d69a599..b3ca6a720d 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -32,8 +32,6 @@
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_drink", /datum/mood_event/quality_verygood)
if (DRINK_FANTASTIC)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_drink", /datum/mood_event/quality_fantastic)
- if (FOOD_AMAZING)
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_food", /datum/mood_event/amazingtaste)
return ..()
/datum/reagent/consumable/nutriment
@@ -772,7 +770,6 @@
nutriment_factor = 2 * REAGENTS_METABOLISM
color = "#792300"
taste_description = "indescribable"
- quality = FOOD_AMAZING
taste_mult = 100
can_synth = FALSE
pH = 6.1
From 325c011142eee40dcafd914d006974731106910a Mon Sep 17 00:00:00 2001
From: Artur
Date: Tue, 14 Apr 2020 09:07:37 +0300
Subject: [PATCH 19/60] Comsigs are hard...
---
code/datums/components/tackle.dm | 14 ++++++--------
.../antagonists/bloodsucker/powers/lunge.dm | 12 +++++++++---
2 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm
index 0af2d8f78c..754be9d817 100644
--- a/code/datums/components/tackle.dm
+++ b/code/datums/components/tackle.dm
@@ -143,8 +143,6 @@
return
var/mob/living/carbon/target = hit
- var/mob/living/carbon/human/T = target
- var/mob/living/carbon/human/S = user
var/roll = rollTackle(target)
user.tackling = FALSE
@@ -190,9 +188,9 @@
target.adjustStaminaLoss(40)
target.Paralyze(5)
target.Knockdown(30)
- if(ishuman(target) && ishuman(user))
- S.dna.species.grab(S, T)
- S.setGrabState(GRAB_PASSIVE)
+ if(ishuman(target) && iscarbon(user))
+ target.grabbedby(user)
+ target.grippedby(user, instant = TRUE)
if(5 to INFINITY) // absolutely BODIED
user.visible_message("[user] lands a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target)
@@ -203,11 +201,11 @@
target.adjustStaminaLoss(40)
target.Paralyze(5)
target.Knockdown(30)
- if(ishuman(target) && ishuman(user))
+ if(ishuman(target) && iscarbon(user))
target.grabbedby(user)
- target.grippedby(user, instant = TRUE) //instant aggro grab
+ target.grippedby(user, instant = TRUE)
- SEND_SIGNAL(user, COMSIG_CARBON_TACKLED, "tackle completed")
+ SEND_SIGNAL(user, COMSIG_CARBON_TACKLED, roll)
return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH
/**
diff --git a/code/modules/antagonists/bloodsucker/powers/lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm
index d40627f493..b8dcc29022 100644
--- a/code/modules/antagonists/bloodsucker/powers/lunge.dm
+++ b/code/modules/antagonists/bloodsucker/powers/lunge.dm
@@ -13,7 +13,11 @@
/datum/action/bloodsucker/lunge/New()
. = ..()
- RegisterSignal(owner, COMSIG_CARBON_TACKLED, .proc/Delayed_DeactivatePower)
+
+
+/datum/action/bloodsucker/lunge/Destroy()
+ . = ..()
+ UnregisterSignal(owner, COMSIG_CARBON_TACKLED)
/datum/action/bloodsucker/lunge/ActivatePower()
var/mob/living/user = owner
@@ -26,13 +30,15 @@
T.skill_mod = 5
T.min_distance = 2
active = TRUE
+ RegisterSignal(user, COMSIG_CARBON_TACKLED, .proc/DeactivatePower)
while(B && ContinueActive(user))
B.AddBloodVolume(-0.1)
sleep(5)
-/datum/action/bloodsucker/lunge/proc/Delayed_DeactivatePower()
+/*/datum/action/bloodsucker/lunge/proc/Delayed_DeactivatePower()
addtimer(CALLBACK(src, .proc/DeactivatePower), 1 SECONDS, TIMER_UNIQUE)
-
+*/
/datum/action/bloodsucker/lunge/DeactivatePower(mob/living/user = owner)
. = ..()
qdel(user.GetComponent(/datum/component/tackler))
+ UnregisterSignal(user, COMSIG_CARBON_TACKLED)
From 20c3c648ce3262538efcea7f4f0739567963880d Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Tue, 14 Apr 2020 21:50:39 -0700
Subject: [PATCH 20/60] Update living.dm
---
code/modules/mob/living/living.dm | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 5fa64e5ab5..4e1f37fdf7 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -646,6 +646,11 @@
// Return as we should only resist one thing at a time. Give clickdelay if the grab wasn't passive.
return old_gs? TRUE : FALSE
+ if(CHECK_MOBILITY(src, MOBILITY_USE) && resist_embedded()) //Citadel Change for embedded removal memes - requires being able to use items.
+ // DO NOT GIVE DEFAULT CLICKDELAY - This is a combat action.
+ changeNext_move(CLICK_CD_MELEE)
+ return FALSE
+
// unbuckling yourself. stops the chain if you try it.
if(buckled && last_special <= world.time)
log_combat(src, buckled, "resisted buckle")
@@ -676,10 +681,7 @@
resist_restraints() //trying to remove cuffs.
// DO NOT GIVE CLICKDELAY - last_special handles this.
return FALSE
- if(CHECK_MOBILITY(src, MOBILITY_USE) && resist_embedded()) //Citadel Change for embedded removal memes - requires being able to use items.
- // DO NOT GIVE DEFAULT CLICKDELAY - This is a combat action.
- changeNext_move(CLICK_CD_MELEE)
- return FALSE
+
/// Proc to resist a grab. moving_resist is TRUE if this began by someone attempting to move. Return FALSE if still grabbed/failed to break out. Use this instead of resist_grab() directly.
/mob/proc/attempt_resist_grab(moving_resist, forced, log = TRUE)
From 375c62175f6ec75c4f2da473fea1c7101e6220c2 Mon Sep 17 00:00:00 2001
From: Artur
Date: Wed, 15 Apr 2020 12:04:25 +0300
Subject: [PATCH 21/60] Finishing touches, fixes icons
---
code/datums/components/tackle.dm | 1 -
.../antagonists/bloodsucker/powers/lunge.dm | 12 +++++++-----
code/modules/clothing/gloves/tacklers.dm | 4 ++--
icons/mob/clothing/hands.dmi | Bin 11008 -> 11611 bytes
icons/obj/clothing/gloves.dmi | Bin 15403 -> 16341 bytes
5 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm
index 754be9d817..8ffa6c5452 100644
--- a/code/datums/components/tackle.dm
+++ b/code/datums/components/tackle.dm
@@ -190,7 +190,6 @@
target.Knockdown(30)
if(ishuman(target) && iscarbon(user))
target.grabbedby(user)
- target.grippedby(user, instant = TRUE)
if(5 to INFINITY) // absolutely BODIED
user.visible_message("[user] lands a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster tackle on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target)
diff --git a/code/modules/antagonists/bloodsucker/powers/lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm
index b8dcc29022..88e39920d4 100644
--- a/code/modules/antagonists/bloodsucker/powers/lunge.dm
+++ b/code/modules/antagonists/bloodsucker/powers/lunge.dm
@@ -20,7 +20,7 @@
UnregisterSignal(owner, COMSIG_CARBON_TACKLED)
/datum/action/bloodsucker/lunge/ActivatePower()
- var/mob/living/user = owner
+ var/mob/living/carbon/user = owner
var/datum/antagonist/bloodsucker/B = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER)
var/datum/component/tackler/T = user.LoadComponent(/datum/component/tackler)
T.stamina_cost = 50
@@ -30,14 +30,16 @@
T.skill_mod = 5
T.min_distance = 2
active = TRUE
- RegisterSignal(user, COMSIG_CARBON_TACKLED, .proc/DeactivatePower)
+ user.toggle_throw_mode()
+ RegisterSignal(user, COMSIG_CARBON_TACKLED, .proc/DelayedDeactivatePower)
while(B && ContinueActive(user))
B.AddBloodVolume(-0.1)
sleep(5)
-
-/*/datum/action/bloodsucker/lunge/proc/Delayed_DeactivatePower()
+
+//Without this, the leap component would get removed too early, causing the normal crash into effects.
+/datum/action/bloodsucker/lunge/proc/DelayedDeactivatePower()
addtimer(CALLBACK(src, .proc/DeactivatePower), 1 SECONDS, TIMER_UNIQUE)
-*/
+
/datum/action/bloodsucker/lunge/DeactivatePower(mob/living/user = owner)
. = ..()
qdel(user.GetComponent(/datum/component/tackler))
diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm
index 95c7739bd8..f11c7ccd6b 100644
--- a/code/modules/clothing/gloves/tacklers.dm
+++ b/code/modules/clothing/gloves/tacklers.dm
@@ -21,7 +21,7 @@
/// See: [/datum/component/tackler/var/speed]
var/tackle_speed = 1
/// See: [/datum/component/tackler/var/skill_mod]
- var/skill_mod = 0
+ var/skill_mod = 1
/obj/item/clothing/gloves/tackler/equipped(mob/user, slot)
. = ..()
@@ -61,7 +61,7 @@
tackle_stam_cost = 35
base_knockdown = 1.5 SECONDS
tackle_range = 5
- skill_mod = 2
+ skill_mod = 3
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi
index cb4251fd3c6240b89b7d7340c5c03331577990d9..f1ae2afed728e482394121a41faf6a3c66ac7679 100644
GIT binary patch
literal 11611
zcmbt)2UJtp)<5cuI;b#?q9ScZK}1B9-ZP4dbfroc=^&s|0)ZrBg8>wzlOUi}si7l*
z5ETKbk(N*s5ebG60)Y^dkmP^kH*em&`G4zM>%GTX;hwYaJ!S3vJA3c5_fEKKWwKB7
zsHljD$Uf667i~mDw!IeqcJBlznhLMNfX*F=-SzN`K4D&W18#>0gocQSL_K>lHW>2u
z>|T+N>d?g9Ll)e*ss8VfIs~aJ_gRgaC*n{6+BA_+zeF~nf;+*Vi3L#XT*?!;<0i6xX
zEHsm^Li_yg>3+R&EKlXcUoG-p
z$hwoaV>~zEAMt5@s#@c#KXpF8_cbxDbazw+di@>D^?El>B+TYQwLraeGR1rMg`ayM
z`^^r$3d7hVo?D!i#9uP`*t4sp`dX31%JnCkdu-5B)w_PU)tGakv3rl+ox1#({&)9p
zewI<5SU>KbHtg%!gun16CC+m7##`7$%}@DC;)2kPC;HD=A#gn{Qte|``2(^__eDg0
z7BRhe-Y)7HZ8|2(Eh3M;h9kDpmNDrXgfy*S;}QMF7nbI!JMTM`Uhc{=-WK04ooa$8
zdRcVx_|V2#wZ3PF`7dXEa`sE;nn058uS-{4i8wNR>Vk`NplaZYj8ZVtTs7c~K7qtO
z?shIaZ@I|<-$&d>C#-+XFolumi(D7|S!~s~;ZFb-{*Axak1TVwXlJ{ZC(sepWMRA3
zr6Gcfm+3w-tyzww`))^(@gAVSXT<%levQGEzAoJ~{y7v~-6IO5m^oM*O~O|N14I
zF%#B(#H%@EHc%^g%Da+PYMDELuXcHIt~=7Qg4~AaO&O?zh!g47`7uMI%loK47D)qO
ztZhgKFKWzz9tx7xB=M|T poJ%j*BGNlr
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
diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi
index e937842275bc88367426079b90389858133d04e6..166da38adc5ea097eb5d0f7716e3931b1afa9490 100644
GIT binary patch
literal 16341
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
literal 15403
zcmb8WbyOTd*FHEn1ef3v+%0Hu4Xz1p3GNac1}C_?yCe`?!{8d+-95OwZIk!i?{{|3
z{_*Xck)EpVu3NWm-ManUr$Ut#rBL4xz5#(is4~(Ls=)6W@M%Yc2fj)C>}EkAC@GK6
znobfXjz-@s?42y^Y(XHmjL4~B+fFtVgi{W$FvOAcYv&^qXa(Z6w=wBWp;FQeeTApj
z{7#$P^9>UBKO3aZcOV%F(a&xfN12}B&(ke`+xS!ENvZr|VBM{2fY~e_1orCpN8$q
z>Rhj(zl-H6)8V}NZm2shbcmj#9P$1IY6&ym92sj1R<2z-cRMdQKcqRr0taE2Qz2(MeX5qtI*JWpoLh#e$#V9NB$*rTe
zb35;ISA)TaTUK!RO(ZI=z?$G-A`f0a{C&EutEv6dvvmk(+JL&mu#8
zC-{mnd3hA%fg+Q&G4V^=-$FAoi1V{B#HMCvqwkY3n7utb_&_!`HjTRF?4fqF^Lnn!
zYVNCEH>suSQQrey;)d_0q1ahHC%*I;kYE^*=Vlro%#>lvC9`m8yfq?UzfQNqW`mjeo1aeW{hO|E(*A*wGz|9eMM+it<4BJ-xnU$qw
zNCJCsz>vqyvMU)fE)(0p&Cz0C60;85Ai{cIo5z*qmo18cUuKCzi<8liZC%aZiDB5@
z|H^LqmAvD=BO{>amXw46ugY(XMBLV(k1QL)E6sXCa6(>p+q&G0s6XIG*3PIlT#$=&
zy{S92YED5N#5wrhw}pw#!%k~V%fr*U;>dkBnItM;`Z%@sB_%(8I0Yr^{Fu{4oeMXA
z$kk;@2GKDy!->65Z_O_vz#8Dgx{#r}DJ?4_NrHXfT4a%skPz5i@$)AX{I;B&oYBru
zDmlBAm6eRFEObtBF#`U|oN`!$#U#xlpK9lDI!|zd6yNj1Nt=%*mh4&5$e-FWO6mx8
zDOHC~VJ4(Pw`hU$5E~NuueE$}s6^Z-a-HcfR**Fq&2{aLgq#&f22!^Jv|gvaKo(Nt
zGSq-NIEZfz=iQsN;MJDIhRkHBUEdm}TtA;iSC;6qB}_-Kc=L4Obz(u__&$nq)o;GM
zKukyuOR`)_)3;uk0t@ZAev@Y#)+$>(F=bs{;)^+D)0Tn)s<^ngA3uNQHa5|ouRqA|AzM)4ie9}~VY)F}!Hn6)nqV=%D3
z9JIOSBXzp2m!oTl&?Go|I%54{2Y1&l-EBSZ)``+HC~$uUbxlkcHj6sX&9TXgBo9){
z%E@(Y#Z^!y&XYGhJbCc^C@6qcn3SlMr`nvInqsq