Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions code/__DEFINES/status_effects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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 //
/////////////
Expand Down
45 changes: 44 additions & 1 deletion code/datums/status_effects/buffs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
4 changes: 4 additions & 0 deletions code/game/objects/effects/temporary_visuals/miscellaneous.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
16 changes: 13 additions & 3 deletions code/game/objects/items/devices/busterarm/_buster.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
18 changes: 9 additions & 9 deletions code/game/objects/items/devices/busterarm/buster_limb.dm
Original file line number Diff line number Diff line change
@@ -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!
Expand All @@ -14,7 +14,7 @@
desc = "A robotic arm designed explicitly for combat and providing the user with extreme power. <b>It can be configured by hand to fit on the opposite arm.</b>"
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()
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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. <b>It can be configured by hand to fit on the opposite arm.</b>"
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()
Expand All @@ -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
Expand All @@ -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
Expand Down
16 changes: 9 additions & 7 deletions code/game/objects/items/devices/busterarm/grapple.dm
Original file line number Diff line number Diff line change
@@ -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 \
Expand Down Expand Up @@ -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
Expand All @@ -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)
Expand Down Expand Up @@ -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
Expand Down
20 changes: 13 additions & 7 deletions code/game/objects/items/devices/busterarm/megabuster.dm
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -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
Expand All @@ -123,14 +123,17 @@
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

// 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
Expand Down Expand Up @@ -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))
Expand Down
22 changes: 9 additions & 13 deletions code/game/objects/items/devices/busterarm/mop.dm
Original file line number Diff line number Diff line change
@@ -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 \
Expand Down Expand Up @@ -42,30 +42,27 @@
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]!"))
L.Knockdown(1 SECONDS)
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]!"))
Expand All @@ -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()
. = ..()
Expand Down
Loading