diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index fef4e566b9ed..0d00b6c713ac 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -48,6 +48,8 @@
#define STATUS_EFFECT_FRENZY /datum/status_effect/frenzy //Makes you fast and stronger
+#define STATUS_EFFECT_DOUBLEDOWN /datum/status_effect/doubledown //Greatly reduced damage taken
+
/////////////
// DEBUFFS //
/////////////
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index e5907d6d7e3e..92f150b379de 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -588,4 +588,47 @@
name = "Time Dilation"
desc = "Your actions are twice as fast, and the delay between them is halved. Additionally, you are immune to slowdown."
icon = 'yogstation/icons/mob/actions/actions_darkspawn.dmi'
- icon_state = "time_dilation" //yogs end
+ icon_state = "time_dilation"
+
+/datum/status_effect/doubledown
+ id = "doubledown"
+ duration = 20
+ tick_interval = 0
+ status_type = STATUS_EFFECT_REFRESH
+ alert_type = /atom/movable/screen/alert/status_effect/doubledown
+ var/obj/effect/temp_visual/decoy/tensecond/s_such_strength //surely a combo wont go on for more than 10 seconds
+
+/atom/movable/screen/alert/status_effect/doubledown
+ name = "Doubling Down"
+ desc = "Taking 65% less damage, go all in!"
+ icon_state = "aura"
+
+/datum/status_effect/doubledown/on_apply()
+ . = ..()
+ if(.)
+ if(ishuman(owner))
+ var/mob/living/carbon/human/H = owner
+ s_such_strength = new(get_turf(H),H)
+ walk_towards(s_such_strength, H)
+ animate(s_such_strength, alpha = 100, color = "#d40a0a", transform = matrix()*1.25, time = 0.25 SECONDS)
+ H.ignore_slowdown(type)
+ H.physiology.brute_mod *= 0.35
+ H.physiology.burn_mod *= 0.35
+ H.physiology.tox_mod *= 0.35
+ H.physiology.oxy_mod *= 0.35
+ H.physiology.clone_mod *= 0.35
+ H.physiology.stamina_mod *= 0.35
+ owner.log_message("gained buster damage reduction", LOG_ATTACK)
+
+/datum/status_effect/doubledown/on_remove()
+ if(ishuman(owner))
+ qdel(s_such_strength)
+ var/mob/living/carbon/human/H = owner
+ H.unignore_slowdown(type)
+ H.physiology.brute_mod /= 0.35
+ H.physiology.burn_mod /= 0.35
+ H.physiology.tox_mod /= 0.35
+ H.physiology.oxy_mod /= 0.35
+ H.physiology.clone_mod /= 0.35
+ H.physiology.stamina_mod /= 0.35
+ owner.log_message("lost buster damage reduction", LOG_ATTACK)//yogs end
diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
index edd83109c1e6..0f354533774f 100644
--- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm
+++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
@@ -224,6 +224,10 @@
. = ..()
animate(src, alpha = 0, time = duration)
+/obj/effect/temp_visual/decoy/tensecond
+ desc = "It's a decoy!"
+ duration = 10 SECONDS
+
/obj/effect/temp_visual/decoy/fading/threesecond
duration = 4 SECONDS
diff --git a/code/game/objects/items/devices/busterarm/_buster.dm b/code/game/objects/items/devices/busterarm/_buster.dm
index d8a97018acbf..c41ad88379bc 100644
--- a/code/game/objects/items/devices/busterarm/_buster.dm
+++ b/code/game/objects/items/devices/busterarm/_buster.dm
@@ -3,13 +3,13 @@
/// Originally shitcoded by Lazenn, reorganized by ynot01
/* Formatting for these files, from top to bottom:
- * Spell/Action
+ * Action
* Trigger()
* IsAvailable()
* Items
- In regards to spells or items with left and right subtypes, list the base, then left, then right.
+ In regards to actions or items with left and right subtypes, list the base, then left, then right.
*/
-/// Base for all buster arm spells
+/// Base for all buster arm actions
/datum/action/cooldown/buster
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS
transparent_when_unavailable = TRUE
@@ -47,3 +47,13 @@
var/obj/item/bodypart/limb_to_hit = target.get_bodypart(user.zone_selected)
var/armor = target.run_armor_check(limb_to_hit, MELEE, armour_penetration = 35)
target.apply_damage(damage, BRUTE, limb_to_hit, armor, wound_bonus=CANT_WOUND)
+
+//knocking them down
+/datum/action/cooldown/buster/proc/footsies(mob/living/target)
+ if(target.mobility_flags & MOBILITY_STAND)
+ animate(target, transform = matrix(90, MATRIX_ROTATE), time = 0 SECONDS, loop = 0)
+
+//Check for if someone is allowed to be stood back up
+/datum/action/cooldown/buster/proc/wakeup(mob/living/target)
+ if(target.mobility_flags & MOBILITY_STAND)
+ animate(target, transform = null, time = 0.4 SECONDS, loop = 0)
diff --git a/code/game/objects/items/devices/busterarm/buster_limb.dm b/code/game/objects/items/devices/busterarm/buster_limb.dm
index dfe8b708813a..c6f74d6ade27 100644
--- a/code/game/objects/items/devices/busterarm/buster_limb.dm
+++ b/code/game/objects/items/devices/busterarm/buster_limb.dm
@@ -1,9 +1,9 @@
/* Formatting for these files, from top to bottom:
- * Spell/Action
+ * Action
* Trigger()
* IsAvailable()
* Items
- In regards to spells or items with left and right subtypes, list the base, then left, then right.
+ In regards to actions or items with left and right subtypes, list the base, then left, then right.
*/
/// The Buster Arm (Left)
/// Same as the right one, but replaces your left arm!
@@ -14,7 +14,7 @@
desc = "A robotic arm designed explicitly for combat and providing the user with extreme power. It can be configured by hand to fit on the opposite arm."
icon = 'icons/mob/augmentation/augments_buster.dmi'
icon_state = "left_buster_arm"
- max_damage = 60
+ max_damage = 50
aux_layer = 12
var/obj/item/bodypart/r_arm/robot/buster/opphand
var/datum/action/cooldown/buster/wire_snatch/l/wire_action =new/datum/action/cooldown/buster/wire_snatch/l()
@@ -23,7 +23,7 @@
var/datum/action/cooldown/buster/slam/l/slam_action = new/datum/action/cooldown/buster/slam/l()
var/datum/action/cooldown/buster/megabuster/l/megabuster_action = new/datum/action/cooldown/buster/megabuster/l()
-/// Set up our spells, disable gloves
+/// Set up our actions, disable gloves
/obj/item/bodypart/l_arm/robot/buster/attach_limb(mob/living/carbon/N, special)
. = ..()
var/datum/species/S = N.dna?.species
@@ -34,7 +34,7 @@
slam_action.Grant(N)
megabuster_action.Grant(N)
-/// Remove our spells, re-enable gloves
+/// Remove our actions, re-enable gloves
/obj/item/bodypart/l_arm/robot/buster/drop_limb(special)
var/mob/living/carbon/N = owner
var/datum/species/S = N.dna?.species
@@ -64,14 +64,14 @@
opphand.burn_dam = src.burn_dam
to_chat(user, span_notice("You modify [src] to be installed on the right arm."))
qdel(src)
-
+
/// Same code as above, but set up for the right arm instead
/obj/item/bodypart/r_arm/robot/buster
name = "right buster arm"
desc = "A robotic arm designed explicitly for combat and providing the user with extreme power. It can be configured by hand to fit on the opposite arm."
icon = 'icons/mob/augmentation/augments_buster.dmi'
icon_state = "right_buster_arm"
- max_damage = 60
+ max_damage = 50
aux_layer = 12
var/obj/item/bodypart/l_arm/robot/buster/opphand
var/datum/action/cooldown/buster/wire_snatch/r/wire_action = new/datum/action/cooldown/buster/wire_snatch/r()
@@ -80,7 +80,7 @@
var/datum/action/cooldown/buster/slam/r/slam_action = new/datum/action/cooldown/buster/slam/r()
var/datum/action/cooldown/buster/megabuster/r/megabuster_action = new/datum/action/cooldown/buster/megabuster/r()
-/// Set up our spells, disable gloves
+/// Set up our actions, disable gloves
/obj/item/bodypart/r_arm/robot/buster/attach_limb(mob/living/carbon/N, special)
. = ..()
var/datum/species/S = N.dna?.species
@@ -91,7 +91,7 @@
slam_action.Grant(N)
megabuster_action.Grant(N)
-/// Remove our spells, re-enable gloves
+/// Remove our actions, re-enable gloves
/obj/item/bodypart/r_arm/robot/buster/drop_limb(special)
var/mob/living/carbon/N = owner
var/datum/species/S = N.dna?.species
diff --git a/code/game/objects/items/devices/busterarm/grapple.dm b/code/game/objects/items/devices/busterarm/grapple.dm
index d8462012de20..7820c9edb0e5 100644
--- a/code/game/objects/items/devices/busterarm/grapple.dm
+++ b/code/game/objects/items/devices/busterarm/grapple.dm
@@ -1,11 +1,11 @@
/* Formatting for these files, from top to bottom:
- * Spell/Action
+ * Action
* Trigger()
* IsAvailable()
* Items
- In regards to spells or items with left and right subtypes, list the base, then left, then right.
+ In regards to actions or items with left and right subtypes, list the base, then left, then right.
*/
-////////////////// Spell //////////////////
+////////////////// Action //////////////////
/datum/action/cooldown/buster/grap
name = "Grapple"
desc = "Prepare your left hand for grabbing. Throw your target and inflict more damage \
@@ -89,14 +89,15 @@
return
if(target == user)
return
- if(isfloorturf(target))
+ if(isopenturf(target))
return
if(iswallturf(target))
return
if(isitem(target))
return
-
- if(isstructure(target) || ismachinery(target) ||ismecha(target))
+ if(iseffect(target))
+ return
+ if(isstructure(target) || ismachinery(target) || ismecha(target))
var/obj/I = target
var/old_density = I.density
if(istype(I, /obj/mecha)) // Can pick up mechs
@@ -107,6 +108,7 @@
I.visible_message(span_warning("[user] grabs [I] and tears it off the bolts securing it!"))
else
return
+ user.apply_status_effect(STATUS_EFFECT_DOUBLEDOWN)
I.visible_message(span_warning("[user] grabs [I] and lifts it above [user.p_their()] head!"))
qdel(src) // Remove the grapple hand so we cant carry several things at once
animate(I, time = 0.2 SECONDS, pixel_y = 20)
@@ -233,7 +235,7 @@
/// Invisible bed helper that buckles mobs to us
/obj/structure/bed/grip
- name = ""
+ name = "buster arm"
icon_state = ""
can_buckle = TRUE
density = FALSE
diff --git a/code/game/objects/items/devices/busterarm/megabuster.dm b/code/game/objects/items/devices/busterarm/megabuster.dm
index 6e274a00c186..c05770a9b66b 100644
--- a/code/game/objects/items/devices/busterarm/megabuster.dm
+++ b/code/game/objects/items/devices/busterarm/megabuster.dm
@@ -1,11 +1,11 @@
/* Formatting for these files, from top to bottom:
- * Spell/Action
+ * Action
* Trigger()
* IsAvailable()
* Items
- In regards to spells or items with left and right subtypes, list the base, then left, then right.
+ In regards to actions or items with left and right subtypes, list the base, then left, then right.
*/
-////////////////// Spell //////////////////
+////////////////// Action //////////////////
/datum/action/cooldown/buster/megabuster
name = "Mega Buster"
// Literal essay. It just punches shit really hard.
@@ -114,7 +114,7 @@
return
if(target == user)
return
-
+
// Punch items, if you wanted to do that for some reason. Can't destroy brains though.
if(isitem(target))
var/obj/I = target
@@ -123,6 +123,7 @@
to_chat(user, span_warning("You probably shouldn't attack something on your person."))
return
if(!istype(I, /obj/item/organ/brain) && !istype(I, /obj/item/clothing/mask/cigarette))
+ user.apply_status_effect(STATUS_EFFECT_DOUBLEDOWN)
I.take_damage(objdam)
user.visible_message(span_warning("[user] pulverizes [I]!"))
return
@@ -130,7 +131,9 @@
// Punch open turf (does nothing)
if(isopenturf(target))
return
-
+ if(iseffect(target))
+ return
+ user.apply_status_effect(STATUS_EFFECT_DOUBLEDOWN)
playsound(L, 'sound/effects/gravhit.ogg', 60, 1)
if(iswallturf(target)) // Destroys a wall
var/turf/closed/wall/W = target
@@ -174,14 +177,17 @@
else // If you target a limb and it's fully damaged then lop it off
var/atom/throw_target = get_edge_target_turf(L, direction)
to_chat(L, span_userdanger("[user] blows [limb_to_hit] off with inhuman force!"))
- user.visible_message(span_warning("[user] punches [L]'s [limb_to_hit] clean off!"))
+ user.visible_message(span_warning("[user] punches [limb_to_hit] clean off!"))
limb_to_hit.drop_limb()
limb_to_hit.throw_at(throw_target, 8, 4, user, 3)
L.Paralyze(3 SECONDS)
return // Stop here, don't bother throwing
L.SpinAnimation(0.5 SECONDS, 2)
to_chat(L, span_userdanger("[user] hits you with a blast of energy and sends you flying!"))
- user.visible_message(span_warning("[user] blasts [L] with a surge of energy and sends [L.p_them()] flying!"))
+ if(!istype(limb_to_hit, /obj/item/bodypart/head))
+ user.visible_message(span_warning("[user] blasts [L] with a surge of energy and sends [L.p_them()] flying!"))
+ else
+ user.visible_message(span_warning("[user] smashes [user.p_their()] fist upwards into [L]'s jaw, sending [L.p_them()] flying!"))//slicer's request
knockedback |= L
// Shake cameras Woosh
for(var/mob/M in view(7, user))
diff --git a/code/game/objects/items/devices/busterarm/mop.dm b/code/game/objects/items/devices/busterarm/mop.dm
index 858e86955b57..385a6c1d88c5 100644
--- a/code/game/objects/items/devices/busterarm/mop.dm
+++ b/code/game/objects/items/devices/busterarm/mop.dm
@@ -1,11 +1,11 @@
/* Formatting for these files, from top to bottom:
- * Spell/Action
+ * Action
* Trigger()
* IsAvailable()
* Items
- In regards to spells or items with left and right subtypes, list the base, then left, then right.
+ In regards to actions or items with left and right subtypes, list the base, then left, then right.
*/
-////////////////// Spell //////////////////
+////////////////// Action //////////////////
/datum/action/cooldown/buster/mop
name = "Mop the Floor"
desc = "Launch forward and drag whoever's in front of you on the ground. The \
@@ -42,21 +42,19 @@
animate(F, alpha = 0, color = "#d40a0a", time = 0.5 SECONDS) // Cool after-image
for(var/mob/living/L in T.contents) // Take all mobs we encounter with us
if(L != B) // Don't want to mop ourselves haha
+ B.apply_status_effect(STATUS_EFFECT_DOUBLEDOWN)
mopped |= L // Add them to the list of things we are mopping
L.add_fingerprint(B, FALSE)
var/turf/Q = get_step(get_turf(B), B.dir) // Get the turf ahead
to_chat(L, span_userdanger("[B] grinds you against the ground!"))
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = matrix(90, MATRIX_ROTATE), time = 0.1 SECONDS, loop = 0)
+ footsies(L)
if(istype(T, /turf/open/space)) // If we're about to hit space, throw the first mob into space
var/atom/throw_target = get_edge_target_turf(L, B.dir)
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = null, time = 0.5 SECONDS, loop = 0)
+ wakeup(L)
L.throw_at(throw_target, 2, 4, B, 3) // Yeet
return // Then stop here
if(Q.density) // If we're about to hit a wall
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = null, time = 0.5 SECONDS, loop = 0)
+ wakeup(L)
grab(B, L, crashdam) // Apply damage to mob
B.visible_message(span_warning("[B] rams [L] into [Q]!"))
to_chat(L, span_userdanger("[B] rams you into [Q]!"))
@@ -64,8 +62,7 @@
L.Immobilize(1.5 SECONDS)
return // Then stop here
for(var/obj/D in Q.contents) // If we're about to hit a dense object like a table or window
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = null, time = 0.5 SECONDS, loop = 0)
+ wakeup(L)
if(D.density == TRUE)
grab(B, L, crashdam) // Apply damage to mob
B.visible_message(span_warning("[B] rams [L] into [D]!"))
@@ -83,8 +80,7 @@
playsound(L,'sound/effects/meteorimpact.ogg', 60, 1)
T = get_step(B, B.dir) // Move our goalpost forward one
for(var/mob/living/C in mopped) // Return everyone to standing if they should be
- if(C.stat == CONSCIOUS && C.resting == FALSE)
- animate(C, transform = null, time = 0.5 SECONDS, loop = 0)
+ wakeup(C)
/datum/action/cooldown/buster/mop/l/IsAvailable()
. = ..()
diff --git a/code/game/objects/items/devices/busterarm/slam.dm b/code/game/objects/items/devices/busterarm/slam.dm
index 6c19cc4fffee..dba36cd5ae71 100644
--- a/code/game/objects/items/devices/busterarm/slam.dm
+++ b/code/game/objects/items/devices/busterarm/slam.dm
@@ -1,11 +1,11 @@
/* Formatting for these files, from top to bottom:
- * Spell/Action
+ * Action
* Trigger()
* IsAvailable()
* Items
- In regards to spells or items with left and right subtypes, list the base, then left, then right.
+ In regards to actions or items with left and right subtypes, list the base, then left, then right.
*/
-////////////////// Spell //////////////////
+////////////////// Action //////////////////
/datum/action/cooldown/buster/slam
name = "Slam"
desc = "Grab the target in front of you and slam them back onto the ground. If there's a solid \
@@ -24,23 +24,23 @@
StartCooldown()
var/turf/T = get_step(get_turf(owner), owner.dir)
var/turf/Z = get_turf(owner)
- owner.visible_message(span_warning("[owner] outstretches [owner.p_their()] arm and goes for a grab!"))
+ var/mob/living/B = owner
+ B.visible_message(span_warning("[B] outstretches [B.p_their()] arm and goes for a grab!"))
for(var/mob/living/L in T.contents) // If there's a mob in front of us, note that this will return on the first mob it finds
- var/turf/Q = get_step(get_turf(owner), turn(owner.dir,180)) // Get the turf behind us
+ B.apply_status_effect(STATUS_EFFECT_DOUBLEDOWN)
+ var/turf/Q = get_step(get_turf(B), turn(B.dir,180)) // Get the turf behind us
if(Q.density) // If there's a wall behind us
var/turf/closed/wall/W = Q
- grab(owner, L, walldam) // Apply damage to mob
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = matrix(90, MATRIX_ROTATE), time = 0.1 SECONDS, loop = 0)
+ grab(B, L, walldam) // Apply damage to mob
+ footsies(L)
if(isanimal(L) && L.stat == DEAD)
L.visible_message(span_warning("[L] explodes into gore on impact!"))
L.gib()
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = null, time = 0.2 SECONDS, loop = 0)
- to_chat(owner, span_warning("[owner] turns around and slams [L] against [Q]!"))
- to_chat(L, span_userdanger("[owner] crushes you against [Q]!"))
+ wakeup(L)
+ to_chat(B, span_warning("[B] turns around and slams [L] against [Q]!"))
+ to_chat(L, span_userdanger("[B] crushes you against [Q]!"))
playsound(L, 'sound/effects/meteorimpact.ogg', 60, 1)
- playsound(owner, 'sound/effects/gravhit.ogg', 20, 1)
+ playsound(B, 'sound/effects/gravhit.ogg', 20, 1)
if(!istype(W, /turf/closed/wall/r_wall)) // Attempt to destroy the wall
W.dismantle_wall(1)
L.forceMove(Q) // Move the mob behind us
@@ -53,56 +53,49 @@
var/obj/machinery/disposal/bin/dumpster = D
L.forceMove(D)
dumpster.do_flush()
- to_chat(L, span_userdanger("[owner] throws you down disposals!"))
+ to_chat(L, span_userdanger("[B] throws you down disposals!"))
target.visible_message(span_warning("[L] is thrown down the trash chute!"))
return // Stop here
- owner.visible_message(span_warning("[owner] turns around and slams [L] against [D]!"))
+ B.visible_message(span_warning("[B] turns around and slams [L] against [D]!"))
D.take_damage(400) // Heavily damage and hopefully break the object
- grab(owner, L, crashdam) // Apply light damage to mob
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = matrix(90, MATRIX_ROTATE), time = 0.1 SECONDS, loop = 0)
+ grab(B, L, crashdam) // Apply light damage to mob
+ footsies(L)
if(isanimal(L) && L.stat == DEAD)
L.visible_message(span_warning("[L] explodes into gore on impact!"))
L.gib()
sleep(0.2 SECONDS)
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = null, time = 0.2 SECONDS, loop = 0)
+ wakeup(L)
for(var/mob/living/M in Q.contents) // If there's mobs behind us, apply damage to the mob for each one they are slammed into
- grab(owner, L, crashdam) // Apply damage to slammed mob
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = matrix(90, MATRIX_ROTATE), time = 0.1 SECONDS, loop = 0)
+ grab(B, L, crashdam) // Apply damage to slammed mob
+ footsies(L)
if(isanimal(L) && L.stat == DEAD)
L.visible_message(span_warning("[L] explodes into gore on impact!"))
L.gib()
sleep(0.2 SECONDS)
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = null, time = 0.2 SECONDS, loop = 0)
- to_chat(L, span_userdanger("[owner] throws you into [M]"))
- to_chat(M, span_userdanger("[owner] throws [L] into you!"))
- owner.visible_message(span_warning("[L] slams into [M]!"))
- grab(owner, M, crashdam) // Apply damage to mob that was behind us
+ wakeup(L)
+ to_chat(L, span_userdanger("[B] throws you into [M]"))
+ to_chat(M, span_userdanger("[B] throws [L] into you!"))
+ B.visible_message(span_warning("[L] slams into [M]!"))
+ grab(B, M, crashdam) // Apply damage to mob that was behind us
L.forceMove(Q) // Move the mob behind us
if(istype(Q, /turf/open/space)) // If they got slammed into space, throw them into deep space
- owner.setDir(turn(owner.dir,180))
+ B.setDir(turn(B.dir,180))
var/atom/throw_target = get_edge_target_turf(L, owner.dir)
- L.throw_at(throw_target, 2, 4, owner, 3)
- owner.visible_message(span_warning("[owner] throws [L] behind [owner.p_them()]!"))
+ L.throw_at(throw_target, 2, 4, B, 3)
+ B.visible_message(span_warning("[B] throws [L] behind [B.p_them()]!"))
return
playsound(L,'sound/effects/meteorimpact.ogg', 60, 1)
- playsound(owner, 'sound/effects/gravhit.ogg', 20, 1)
- to_chat(L, span_userdanger("[owner] catches you with [owner.p_their()] hand and crushes you on the ground!"))
- owner.visible_message(span_warning("[owner] turns around and slams [L] against the ground!"))
- owner.setDir(turn(owner.dir, 180))
- grab(owner, L, supdam) // Apply damage for the suplex itself, independent of whether anything was hit
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = matrix(90, MATRIX_ROTATE), time = 0.1 SECONDS, loop = 0)
+ playsound(B, 'sound/effects/gravhit.ogg', 20, 1)
+ to_chat(L, span_userdanger("[B] catches you with [B.p_their()] hand and crushes you on the ground!"))
+ B.visible_message(span_warning("[B] turns around and slams [L] against the ground!"))
+ B.setDir(turn(B.dir, 180))
+ grab(B, L, supdam) // Apply damage for the suplex itself, independent of whether anything was hit
+ footsies(L)
if(isanimal(L) && L.stat == DEAD)
L.visible_message(span_warning("[L] explodes into gore on impact!"))
L.gib()
sleep(0.2 SECONDS)
- if(L.stat == CONSCIOUS && L.resting == FALSE)
- animate(L, transform = null, time = 0.2 SECONDS, loop = 0)
-
+ wakeup(L)
/datum/action/cooldown/buster/slam/l/IsAvailable()
. = ..()
var/mob/living/O = owner
diff --git a/code/game/objects/items/devices/busterarm/wire_snatch.dm b/code/game/objects/items/devices/busterarm/wire_snatch.dm
index 12a75a33ba08..e47512b402e8 100644
--- a/code/game/objects/items/devices/busterarm/wire_snatch.dm
+++ b/code/game/objects/items/devices/busterarm/wire_snatch.dm
@@ -1,11 +1,11 @@
/* Formatting for these files, from top to bottom:
- * Spell/Action
+ * Action
* Trigger()
* IsAvailable()
* Items
- In regards to spells or items with left and right subtypes, list the base, then left, then right.
+ In regards to actions or items with left and right subtypes, list the base, then left, then right.
*/
-////////////////// Spell //////////////////
+////////////////// Action //////////////////
/datum/action/cooldown/buster/wire_snatch
name = "Wire Snatch"
desc = "Extend a wire for reeling in foes from a distance. Reeled in targets will be unable to walk for 1.5 seconds. \
@@ -107,6 +107,7 @@
damage = 0
armour_penetration = 100
damage_type = BRUTE
+ nodamage = TRUE
range = 8
hitsound = 'sound/effects/splat.ogg'
knockdown = 0
@@ -128,6 +129,7 @@
var/mob/living/carbon/human/H = firer
if(!H)
return
+ H.apply_status_effect(STATUS_EFFECT_DOUBLEDOWN)
if(isobj(target)) // If it's an object
var/obj/item/I = target
if(!I?.anchored) // Give it to us if it's not anchored
@@ -141,6 +143,7 @@
return
zip(H, target) // Pull us towards it if it's anchored
if(isliving(target)) // If it's somebody
+ H.apply_status_effect(STATUS_EFFECT_DOUBLEDOWN)
var/mob/living/L = target
var/turf/T = get_step(get_turf(H), H.dir)
var/turf/Q = get_turf(H)
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index a55d96f05567..af25a90d0b00 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -325,7 +325,8 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
name = "Buster Arm"
desc = "A box containing a combat-focused prosthetic left arm that can be attached on contact; It is intended for close combat and possesses immense strength. With it, the user\
can send people and heavy objects flying and even tear down solid objects like they're wet paper. To close the distance with ranged opponents, a grappling hook can be ejected\
- from the arm which momentarily keeps victims in place. Due to its unorthodox nature, the box includes 3 monkey cubes to familiarize the user with the arm functions."
+ from the arm which momentarily keeps victims in place. Due to its unorthodox nature, the box includes 3 monkey cubes to familiarize the user with the arm functions. Users are \
+ warned that the arm renders them unable to wear gloves and sticks out of most outerwear."
item = /obj/item/storage/box/syndie_kit/buster
cost = 15
manufacturer = /datum/corporation/traitor/cybersun
diff --git a/icons/mob/augmentation/augments_buster.dmi b/icons/mob/augmentation/augments_buster.dmi
index a1c16dd72953..a8dbc3963b10 100644
Binary files a/icons/mob/augmentation/augments_buster.dmi and b/icons/mob/augmentation/augments_buster.dmi differ
diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi
index 76301089081c..434eccef65e3 100644
Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ