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