Merge pull request #16720 from Qwertytoforty/grabbing-your-attention

Makes revive, biodegrade, and freedom break grabs
This commit is contained in:
variableundefined
2021-09-17 22:12:08 -05:00
committed by GitHub
4 changed files with 27 additions and 4 deletions
+1 -1
View File
@@ -1524,7 +1524,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
/datum/uplink_item/implants/freedom
name = "Freedom Implant"
desc = "An implant injected into the body and later activated manually to break out of any restraints. Can be activated up to 4 times."
desc = "An implant injected into the body and later activated manually to break out of any restraints or grabs. Can be activated up to 4 times."
reference = "FI"
item = /obj/item/implanter/freedom
cost = 5
@@ -1,7 +1,7 @@
/datum/action/changeling/biodegrade
name = "Biodegrade"
desc = "Dissolves restraints or other objects preventing free movement. Costs 30 chemicals."
helptext = "This is obvious to nearby people, and can destroy standard restraints and closets."
helptext = "This is obvious to nearby people, and can destroy standard restraints and closets, and break you out of grabs."
button_icon_state = "biodegrade"
chemical_cost = 30 //High cost to prevent spam
dna_cost = 2
@@ -9,7 +9,7 @@
/datum/action/changeling/biodegrade/sting_action(mob/living/carbon/human/user)
var/used = FALSE // only one form of shackles removed per use
if(!user.restrained() && !user.legcuffed && !istype(user.loc, /obj/structure/closet) && !istype(user.loc, /obj/structure/spider/cocoon))
if(!user.restrained() && !user.legcuffed && !istype(user.loc, /obj/structure/closet) && !istype(user.loc, /obj/structure/spider/cocoon) && !user.grabbed_by)
to_chat(user, "<span class='warning'>We are already free!</span>")
return FALSE
@@ -57,7 +57,15 @@
to_chat(user, "<span class='warning'>We secrete acidic enzymes from our skin and begin melting our cocoon...</span>")
addtimer(CALLBACK(src, .proc/dissolve_cocoon, user, C), 2.5 SECONDS) //Very short because it's just webs
used = TRUE
for(var/obj/item/grab/G in user.grabbed_by)
var/mob/living/carbon/M = G.assailant
user.visible_message("<span class='warning'>[user] spits acid at [M]'s face and slips out of their grab!</span>")
M.Stun(1) //Drops the grab
M.apply_damage(5, BURN, "head", M.run_armor_check("head", "melee"))
user.SetStunned(0) //This only triggers if they are grabbed, to have them break out of the grab, without the large stun time. If you use biodegrade as an antistun without being grabbed, it will not work
user.SetWeakened(0)
playsound(user.loc, 'sound/weapons/sear.ogg', 50, TRUE)
used = TRUE
if(used)
SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]"))
return TRUE
@@ -8,6 +8,12 @@
//Revive from regenerative stasis
/datum/action/changeling/revive/sting_action(mob/living/carbon/user)
REMOVE_TRAIT(user, TRAIT_FAKEDEATH, "changeling")
for(var/obj/item/grab/G in user.grabbed_by)
var/mob/living/carbon/M = G.assailant
user.visible_message("<span class='warning'>[user] suddenly hits [M] in the face and slips out of their grab!</span>")
M.Stun(1) //Drops the grab
M.apply_damage(5, BRUTE, "head", M.run_armor_check("head", "melee"))
playsound(user.loc, 'sound/weapons/punch1.ogg', 25, 1, -1)
user.revive()
user.updatehealth("revive sting")
user.update_blind_effects()
@@ -13,6 +13,15 @@
if(iscarbon(imp_in))
var/mob/living/carbon/C_imp_in = imp_in
C_imp_in.uncuff()
for(var/obj/item/grab/G in C_imp_in.grabbed_by)
var/mob/living/carbon/M = G.assailant
C_imp_in.visible_message("<span class='warning'>[C_imp_in] suddenly shocks [M] from their wrists and slips out of their grab!</span>")
M.Stun(1) //Drops the grab
M.apply_damage(2, BURN, "r_hand", M.run_armor_check("r_hand", "energy"))
M.apply_damage(2, BURN, "l_hand", M.run_armor_check("l_hand", "energy"))
C_imp_in.SetStunned(0) //This only triggers if they are grabbed, to have them break out of the grab, without the large stun time.
C_imp_in.SetWeakened(0)
playsound(C_imp_in.loc, "sound/weapons/Egloves.ogg", 75, 1)
if(!uses)
qdel(src)