diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index 1db82f879fe..293d97e4fa3 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -95,6 +95,8 @@
#define APPEARANCE_ALL_BODY APPEARANCE_ALL_HAIR|APPEARANCE_HEAD_ACCESSORY|APPEARANCE_MARKINGS|APPEARANCE_BODY_ACCESSORY|APPEARANCE_ALT_HEAD
#define APPEARANCE_ALL 32767
+#define STAMINA_REGEN_BLOCK_TIME (10 SECONDS)
+
//Slime evolution threshold. Controls how fast slimes can split/grow
#define SLIME_EVOLUTION_THRESHOLD 10
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 10658df4c4b..7c61cf832b5 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -381,7 +381,7 @@ This is always put in the attack log.
drifting = 0
Uloc = user.loc
- if(!user || user.stat || user.weakened || user.stunned || (!drifting && user.loc != Uloc)|| (extra_checks && !extra_checks.Invoke()))
+ if(!user || user.stat || user.IsWeakened() || user.stunned || (!drifting && user.loc != Uloc)|| (extra_checks && !extra_checks.Invoke()))
. = 0
break
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index c279a7be2a5..c3c9b6f7e65 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -169,7 +169,7 @@
/obj/screen/storage/Click(location, control, params)
if(world.time <= usr.next_move)
return 1
- if(usr.stat || usr.paralysis || usr.stunned || usr.weakened)
+ if(usr.stat || usr.paralysis || usr.stunned || usr.IsWeakened())
return 1
if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
return 1
diff --git a/code/datums/action.dm b/code/datums/action.dm
index 043117efb84..b7af84e9ddf 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -72,7 +72,7 @@
if(owner.restrained())
return 0
if(check_flags & AB_CHECK_STUNNED)
- if(owner.stunned || owner.weakened)
+ if(owner.stunned || owner.IsWeakened())
return 0
if(check_flags & AB_CHECK_LYING)
if(owner.lying)
diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm
index 7791c48b432..6c9674d130e 100644
--- a/code/game/gamemodes/vampire/vampire_powers.dm
+++ b/code/game/gamemodes/vampire/vampire_powers.dm
@@ -584,7 +584,7 @@
return
if(stat != DEAD)
- if(weakened)
+ if(IsWeakened())
visible_message("[src] looks to be in pain!")
adjustBrainLoss(60)
else
diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm
index c8bdeb37ac4..2c6e60c3d52 100644
--- a/code/game/machinery/OpTable.dm
+++ b/code/game/machinery/OpTable.dm
@@ -52,7 +52,7 @@
/obj/machinery/optable/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
- if(usr.stat || (!ishuman(user) && !isrobot(user)) || user.restrained() || !check_table(user) || user.weakened || user.stunned)
+ if(usr.stat || (!ishuman(user) && !isrobot(user)) || user.restrained() || !check_table(user) || user.IsWeakened() || user.stunned)
return
if(!ismob(O)) //humans only
diff --git a/code/game/objects/items/weapons/storage/artistic_toolbox.dm b/code/game/objects/items/weapons/storage/artistic_toolbox.dm
index 0d8613cce4a..0c0e2b03b3c 100644
--- a/code/game/objects/items/weapons/storage/artistic_toolbox.dm
+++ b/code/game/objects/items/weapons/storage/artistic_toolbox.dm
@@ -71,7 +71,7 @@
return
if(!victim)
return
- if(!victim.stat && !victim.restrained() && !victim.weakened)
+ if(!victim.stat && !victim.restrained() && !victim.IsWeakened())
to_chat(user, "They're moving too much to feed to His Grace!")
return
user.visible_message("[user] is trying to feed [victim] to [src]!")
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 797f0922565..6849e6d07d3 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -132,7 +132,7 @@
if(user.restrained() || user.buckled)
to_chat(user, "You need your hands and legs free for this.")
return 0
- if(user.stat || user.paralysis || user.sleeping || user.lying || user.weakened)
+ if(user.stat || user.paralysis || user.sleeping || user.lying || user.IsWeakened())
return 0
if(issilicon(user))
to_chat(user, "You need hands for this.")
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index b58aecc7c78..23ee0d0c5df 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -270,7 +270,7 @@
return
if(O.loc == user)
return
- if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis || user.lying)
+ if(user.restrained() || user.stat || user.IsWeakened() || user.stunned || user.paralysis || user.lying)
return
if((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
return
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index c4c0f9b7965..c8c148ac1e1 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -696,7 +696,7 @@
return
/obj/structure/rack/attack_hand(mob/living/user)
- if(user.weakened || user.resting || user.lying)
+ if(user.IsWeakened() || user.resting || user.lying)
return
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src, ATTACK_EFFECT_KICK)
diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm
index 19c10a31c58..53330341bfe 100644
--- a/code/modules/clothing/spacesuits/rig/modules/modules.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm
@@ -13,7 +13,7 @@
desc = "It looks pretty sciency."
icon = 'icons/obj/rig_modules.dmi'
icon_state = "module"
-
+
toolspeed = 1
var/damage = 0
@@ -155,7 +155,7 @@
to_chat(usr, "The suit is not initialized.")
return 0
- if(usr.lying || usr.stat || usr.stunned || usr.paralysis || usr.weakened)
+ if(usr.lying || usr.stat || usr.stunned || usr.paralysis || usr.IsWeakened())
to_chat(usr, "You cannot use the suit in this state.")
return 0
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index c8b5e79eb32..3167e68ca6f 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -1052,7 +1052,7 @@
if(user.restrained())
to_chat(user, "You need your hands free for this.")
return 0
- if(user.stat || user.paralysis || user.sleeping || user.lying || user.weakened)
+ if(user.stat || user.paralysis || user.sleeping || user.lying || user.IsWeakened())
return 0
return 1
#undef ONLY_DEPLOY
diff --git a/code/modules/martial_arts/cqc.dm b/code/modules/martial_arts/cqc.dm
index b57e7fc4f98..556cfded723 100644
--- a/code/modules/martial_arts/cqc.dm
+++ b/code/modules/martial_arts/cqc.dm
@@ -53,7 +53,7 @@
/datum/martial_art/cqc/proc/Slam(mob/living/carbon/human/A, mob/living/carbon/human/D)
if(!can_use(A))
return FALSE
- if(!D.weakened && !D.resting && !D.lying)
+ if(!D.IsWeakened() && !D.resting && !D.lying)
D.visible_message("[A] slams [D] into the ground!", \
"[A] slams you into the ground!")
playsound(get_turf(A), 'sound/weapons/slam.ogg', 50, 1, -1)
@@ -70,7 +70,7 @@
if(!can_use(A))
return FALSE
var/success = FALSE
- if(!D.stat || !D.weakened)
+ if(!D.stat || !D.IsWeakened())
D.visible_message("[A] kicks [D] back!", \
"[A] kicks you back!")
playsound(get_turf(A), 'sound/weapons/cqchit1.ogg', 50, 1, -1)
@@ -79,7 +79,7 @@
D.apply_damage(10, BRUTE)
add_attack_logs(A, D, "Melee attacked with martial-art [src] : Kick", ATKLOG_ALL)
success = TRUE
- if(D.weakened && !D.stat)
+ if(D.IsWeakened() && !D.stat)
D.visible_message("[A] kicks [D]'s head, knocking [D.p_them()] out!", \
"[A] kicks your head, knocking you out!")
playsound(get_turf(A), 'sound/weapons/genhit1.ogg', 50, 1, -1)
@@ -164,7 +164,7 @@
A.do_attack_animation(D)
var/picked_hit_type = pick("CQC'd", "neck chopped", "gut punched", "Big Bossed")
var/bonus_damage = 13
- if(D.weakened || D.resting || D.lying)
+ if(D.IsWeakened() || D.resting || D.lying)
bonus_damage += 5
picked_hit_type = "stomps on"
D.apply_damage(bonus_damage, BRUTE)
@@ -175,7 +175,7 @@
D.visible_message("[A] [picked_hit_type] [D]!", \
"[A] [picked_hit_type] you!")
add_attack_logs(A, D, "Melee attacked with martial-art [src] : [picked_hit_type]", ATKLOG_ALL)
- if(A.resting && !D.stat && !D.weakened)
+ if(A.resting && !D.stat && !D.IsWeakened())
D.visible_message("[A] leg sweeps [D]!", \
"[A] leg sweeps you!")
playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, 1, -1)
@@ -204,7 +204,7 @@
restraining = FALSE
if(prob(65))
- if(!D.stat || !D.weakened || !restraining)
+ if(!D.stat || !D.IsWeakened() || !restraining)
I = D.get_active_hand()
D.visible_message("[A] strikes [D]'s jaw with their hand!", \
"[A] strikes your jaw, disorienting you!")
diff --git a/code/modules/martial_arts/krav_maga.dm b/code/modules/martial_arts/krav_maga.dm
index 5da6b329dcb..88e69919990 100644
--- a/code/modules/martial_arts/krav_maga.dm
+++ b/code/modules/martial_arts/krav_maga.dm
@@ -75,7 +75,7 @@
return 0
/datum/martial_art/krav_maga/proc/leg_sweep(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(D.stat || D.weakened)
+ if(D.stat || D.IsWeakened())
return 0
D.visible_message("[A] leg sweeps [D]!", \
"[A] leg sweeps you!")
@@ -111,7 +111,7 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi
add_attack_logs(A, D, "Melee attacked with [src]")
var/picked_hit_type = pick("punches", "kicks")
var/bonus_damage = 10
- if(D.weakened || D.resting || D.lying)
+ if(D.IsWeakened() || D.resting || D.lying)
bonus_damage += 5
picked_hit_type = "stomps on"
D.apply_damage(bonus_damage, BRUTE)
diff --git a/code/modules/martial_arts/mimejutsu.dm b/code/modules/martial_arts/mimejutsu.dm
index 5bfff3bf093..a6d6d9e3341 100644
--- a/code/modules/martial_arts/mimejutsu.dm
+++ b/code/modules/martial_arts/mimejutsu.dm
@@ -22,7 +22,7 @@
return 0
/datum/martial_art/mimejutsu/proc/mimeChuck(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(!D.stat && !D.stunned && !D.weakened)
+ if(!D.stat && !D.stunned && !D.IsWeakened())
var/damage = rand(5, 8) + A.dna.species.punchdamagelow
if(!damage)
playsound(D.loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
@@ -54,7 +54,7 @@
return basic_hit(A,D)
/datum/martial_art/mimejutsu/proc/mimePalm(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(!D.stat && !D.stunned && !D.weakened)
+ if(!D.stat && !D.stunned && !D.IsWeakened())
D.visible_message("[A] has barely touched [D] with [A.p_their()] palm!", \
"[A] hovers [A.p_their()] palm over your face!")
diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm
index 38f1dba77b9..b3e30930c6a 100644
--- a/code/modules/martial_arts/sleeping_carp.dm
+++ b/code/modules/martial_arts/sleeping_carp.dm
@@ -35,7 +35,7 @@
return 0
/datum/martial_art/the_sleeping_carp/proc/wristWrench(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(!D.stat && !D.stunned && !D.weakened)
+ if(!D.stat && !D.stunned && !D.IsWeakened())
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \
"[A] grabs your wrist and violently wrenches it to the side!")
@@ -50,7 +50,7 @@
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/backKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(A.dir == D.dir && !D.stat && !D.weakened)
+ if(A.dir == D.dir && !D.stat && !D.IsWeakened())
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("[A] kicks [D] in the back!", \
"[A] kicks you in the back, making you stumble and fall!")
@@ -63,7 +63,7 @@
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/kneeStomach(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(!D.stat && !D.weakened)
+ if(!D.stat && !D.IsWeakened())
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("[A] knees [D] in the stomach!", \
"[A] winds you with a knee in the stomach!")
@@ -77,7 +77,7 @@
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/headKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(!D.stat && !D.weakened)
+ if(!D.stat && !D.IsWeakened())
A.do_attack_animation(D, ATTACK_EFFECT_KICK)
D.visible_message("[A] kicks [D] in the head!", \
"[A] kicks you in the jaw!")
@@ -91,7 +91,7 @@
return basic_hit(A,D)
/datum/martial_art/the_sleeping_carp/proc/elbowDrop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
- if(D.weakened || D.resting || D.stat)
+ if(D.IsWeakened() || D.resting || D.stat)
A.do_attack_animation(D, ATTACK_EFFECT_PUNCH)
D.visible_message("[A] elbow drops [D]!", \
"[A] piledrives you with [A.p_their()] elbow!")
diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
index bdc2ee31f77..7f17a8a87e1 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
@@ -25,7 +25,7 @@
icon_state = "alien[caste]_dead"
pixel_y = 0
- else if(stat == UNCONSCIOUS || weakened)
+ else if(stat == UNCONSCIOUS || IsWeakened())
icon_state = "alien[caste]_unconscious"
pixel_y = 0
else if(leap_on_click)
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index c23db2f5501..32841d3804d 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -383,7 +383,7 @@
message = "[src] flips in [M]'s general direction."
SpinAnimation(5,1)
else
- if(lying || weakened)
+ if(lying || IsWeakened())
message = "[src] flops and flails around on the floor."
else
var/obj/item/grab/G
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 433a6adcc8f..6c1cfeb7714 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -633,7 +633,7 @@ emp_act
if("brute")
if(M.force > 35) // durand and other heavy mechas
Paralyse(1)
- else if(M.force > 20 && !weakened) // lightweight mechas like gygax
+ else if(M.force > 20 && !IsWeakened()) // lightweight mechas like gygax
Weaken(2)
update |= affecting.receive_damage(dmg, 0)
playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE)
diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm
index c6c8b75518a..c56f0140ee2 100644
--- a/code/modules/mob/living/carbon/human/species/_species.dm
+++ b/code/modules/mob/living/carbon/human/species/_species.dm
@@ -246,7 +246,7 @@
if(H.r_hand && (H.r_hand.flags & HANDSLOW))
. += H.r_hand.slowdown
- var/health_deficiency = (H.maxHealth - H.health + H.staminaloss)
+ var/health_deficiency = max(H.maxHealth - H.health, H.staminaloss)
var/hungry = (500 - H.nutrition)/5 // So overeat would be 100 and default level would be 80
if(H.reagents)
for(var/datum/reagent/R in H.reagents.reagent_list)
@@ -751,7 +751,7 @@
return FALSE //Unsupported slot
/datum/species/proc/get_perceived_trauma(mob/living/carbon/human/H)
- return H.health - H.getStaminaLoss()
+ return min(H.health, H.maxHealth - H.getStaminaLoss())
/datum/species/proc/handle_hud_icons(mob/living/carbon/human/H)
if(!H.client)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index a9263f58ea2..5352ba525f1 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -258,8 +258,10 @@
//this updates all special effects: stunned, sleeping, weakened, druggy, stuttering, etc..
/mob/living/carbon/handle_status_effects()
..()
-
- setStaminaLoss(max((staminaloss - 3), 0))
+ if(stam_regen_start_time <= world.time)
+ if(stam_paralyzed)
+ update_stamina()
+ setStaminaLoss(0, FALSE)
var/restingpwr = 1 + 4 * resting
diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm
new file mode 100644
index 00000000000..a9f68773ed5
--- /dev/null
+++ b/code/modules/mob/living/carbon/status_procs.dm
@@ -0,0 +1,15 @@
+/mob/living/carbon/IsWeakened(include_stamcrit = TRUE)
+ return ..() || (include_stamcrit && stam_paralyzed)
+
+/mob/living/carbon/proc/enter_stamcrit()
+ if(!(status_flags & CANWEAKEN))
+ return
+ if(absorb_stun(0)) //continuous effect, so we don't want it to increment the stuns absorbed.
+ return
+ if(!IsWeakened())
+ to_chat(src, "You're too exhausted to keep going...")
+ var/prev = stam_paralyzed
+ stam_paralyzed = TRUE
+ update_canmove()
+ if(!prev && getStaminaLoss() < 120) // Puts you a little further into the initial stamcrit, makes stamcrit harder to outright counter with chems.
+ adjustStaminaLoss(30, FALSE)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/update_status.dm b/code/modules/mob/living/carbon/update_status.dm
index 58c6e09764b..f78bdf63ec9 100644
--- a/code/modules/mob/living/carbon/update_status.dm
+++ b/code/modules/mob/living/carbon/update_status.dm
@@ -18,15 +18,13 @@
create_debug_log("woke up, trigger reason: [reason]")
/mob/living/carbon/update_stamina()
- ..()
- if(staminaloss)
- var/total_health = (health - staminaloss)
- if(total_health <= HEALTH_THRESHOLD_CRIT && !stat)
- to_chat(src, "You're too exhausted to keep going...")
- Weaken(5)
- setStaminaLoss(health - 2)
- handle_hud_icons_health()
- return
+ var/stam = getStaminaLoss()
+ if(stam > DAMAGE_PRECISION && (maxHealth - stam) <= HEALTH_THRESHOLD_CRIT && !stat)
+ enter_stamcrit()
+ else if(stam_paralyzed)
+ stam_paralyzed = FALSE
+ update_canmove()
+ handle_hud_icons_health()
/mob/living/carbon/can_hear()
. = FALSE
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 4f2323e2025..09abb09041d 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -260,28 +260,30 @@
if(status_flags & GODMODE)
return FALSE
var/old_stamloss = staminaloss
- staminaloss = max(staminaloss + amount, 0)
+ staminaloss = min(max(staminaloss + amount, 0), 120)
if(old_stamloss == staminaloss)
updating = FALSE
. = STATUS_UPDATE_NONE
else
. = STATUS_UPDATE_STAMINA
+ if(amount > 0)
+ stam_regen_start_time = world.time + STAMINA_REGEN_BLOCK_TIME
if(updating)
- handle_hud_icons_health()
update_stamina()
/mob/living/proc/setStaminaLoss(amount, updating = TRUE)
if(status_flags & GODMODE)
return FALSE
var/old_stamloss = staminaloss
- staminaloss = amount
+ staminaloss = min(max(amount, 0), 120)
if(old_stamloss == staminaloss)
updating = FALSE
. = STATUS_UPDATE_NONE
else
. = STATUS_UPDATE_STAMINA
+ if(amount > 0)
+ stam_regen_start_time = world.time + STAMINA_REGEN_BLOCK_TIME
if(updating)
- handle_hud_icons_health()
update_stamina()
/mob/living/proc/getMaxHealth()
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 5bc42caab14..74a51a771ac 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -69,3 +69,5 @@
var/deathgasp_on_death = FALSE
var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added
+ var/stam_regen_start_time = 0 //used to halt stamina regen temporarily
+ var/stam_paralyzed = FALSE //knocks you down
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index cb6b3eaa104..25547e5de9e 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -318,7 +318,7 @@
set category = "pAI Commands"
set name = "Unfold Chassis"
- if(stat || sleeping || paralysis || weakened)
+ if(stat || sleeping || paralysis || IsWeakened())
return
if(loc != card)
@@ -353,7 +353,7 @@
set category = "pAI Commands"
set name = "Collapse Chassis"
- if(stat || sleeping || paralysis || weakened)
+ if(stat || sleeping || paralysis || IsWeakened())
return
if(loc == card)
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index bf09191ecf2..258ccec026a 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -169,7 +169,7 @@
weaponlock_time = 120
/mob/living/silicon/robot/update_canmove(delay_action_updates = 0)
- if(paralysis || stunned || weakened || buckled || lockcharge || stat)
+ if(paralysis || stunned || IsWeakened() || buckled || lockcharge || stat)
canmove = 0
else
canmove = 1
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 59a0d38f15a..2bb0775bf0d 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -906,7 +906,7 @@ var/list/robot_verbs_default = list(
/mob/living/silicon/robot/update_icons()
overlays.Cut()
- if(stat != DEAD && !(paralysis || stunned || weakened || low_power_mode)) //Not dead, not stunned.
+ if(stat != DEAD && !(paralysis || stunned || IsWeakened() || low_power_mode)) //Not dead, not stunned.
if(custom_panel in custom_eye_names)
overlays += "eyes-[custom_panel]"
else
diff --git a/code/modules/mob/living/silicon/robot/update_status.dm b/code/modules/mob/living/silicon/robot/update_status.dm
index fafc5a4c8c3..63c13f97d24 100644
--- a/code/modules/mob/living/silicon/robot/update_status.dm
+++ b/code/modules/mob/living/silicon/robot/update_status.dm
@@ -1,6 +1,6 @@
// No args for restraints because robots don't have those
/mob/living/silicon/robot/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, ignore_lying = FALSE)
- if(stat || lockcharge || weakened || stunned || paralysis || !is_component_functioning("actuator"))
+ if(stat || lockcharge || IsWeakened() || stunned || paralysis || !is_component_functioning("actuator"))
return TRUE
/mob/living/silicon/robot/has_vision(information_only = FALSE)
@@ -14,7 +14,7 @@
death()
create_debug_log("died of damage, trigger reason: [reason]")
return
- if(!is_component_functioning("actuator") || !is_component_functioning("power cell") || paralysis || sleeping || resting || stunned || weakened || getOxyLoss() > maxHealth * 0.5)
+ if(!is_component_functioning("actuator") || !is_component_functioning("power cell") || paralysis || sleeping || resting || stunned || IsWeakened() || getOxyLoss() > maxHealth * 0.5)
if(stat == CONSCIOUS)
KnockOut()
create_debug_log("fell unconscious, trigger reason: [reason]")
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 26f02503c14..01c1f7cfe43 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -500,7 +500,7 @@
. |= pcollar.GetAccess()
/mob/living/simple_animal/update_canmove(delay_action_updates = 0)
- if(paralysis || stunned || weakened || stat || resting)
+ if(paralysis || stunned || IsWeakened() || stat || resting)
drop_r_hand()
drop_l_hand()
canmove = 0
diff --git a/code/modules/mob/living/update_status.dm b/code/modules/mob/living/update_status.dm
index bdaa0972aef..20cc969119f 100644
--- a/code/modules/mob/living/update_status.dm
+++ b/code/modules/mob/living/update_status.dm
@@ -62,11 +62,11 @@
// Whether the mob is capable of standing or not
/mob/living/proc/can_stand()
- return !(weakened || paralysis || stat || (status_flags & FAKEDEATH))
+ return !(IsWeakened() || paralysis || stat || (status_flags & FAKEDEATH))
// Whether the mob is capable of actions or not
/mob/living/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, ignore_lying = FALSE)
- if(stat || paralysis || stunned || weakened || (!ignore_restraints && restrained()) || (!ignore_lying && lying))
+ if(stat || paralysis || stunned || IsWeakened() || (!ignore_restraints && restrained()) || (!ignore_lying && lying))
return TRUE
// wonderful proc names, I know - used to check whether the blur overlay
diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm
index f6e6e07673f..6716ea0e4a9 100644
--- a/code/modules/mob/status_procs.dm
+++ b/code/modules/mob/status_procs.dm
@@ -190,6 +190,9 @@
return
+/mob/proc/IsWeakened()
+ return weakened
+
/mob/proc/Weaken()
return
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 5a09e1a55a9..e7be4698fcf 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -317,7 +317,7 @@
src.add_fingerprint(user)
if(target == user && !user.incapacitated())
visible_message("[usr] jumps onto [src]!")
- else if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
+ else if(target != user && !user.restrained() && !user.stat && !user.IsWeakened() && !user.stunned && !user.paralysis)
if(target.anchored) return
if(!ishuman(user)) return
visible_message("[usr] drags [target.name] onto [src]!")
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 22d6c3744d1..814ac3d7e46 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -47,7 +47,7 @@
/obj/item/projectile/beam/disabler
name = "disabler beam"
icon_state = "omnilaser"
- damage = 36
+ damage = 30
damage_type = STAMINA
flag = "energy"
hitsound = 'sound/weapons/tap.ogg'
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index e8f7d16cc37..1945c6dffe5 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -314,7 +314,6 @@ var/const/INGEST = 2
if(update_flags & STATUS_UPDATE_CANMOVE)
M.update_canmove()
if(update_flags & STATUS_UPDATE_STAMINA)
- M.handle_hud_icons_health()
M.update_stamina()
if(update_flags & STATUS_UPDATE_BLIND)
M.update_blind_effects()
diff --git a/code/modules/reagents/chemistry/reagents/blob.dm b/code/modules/reagents/chemistry/reagents/blob.dm
index 903ac9fa350..571db376f80 100644
--- a/code/modules/reagents/chemistry/reagents/blob.dm
+++ b/code/modules/reagents/chemistry/reagents/blob.dm
@@ -25,7 +25,7 @@
if(method == TOUCH)
volume = ..()
M.apply_damage(0.6*volume, BRUTE)
- M.adjustStaminaLoss(0.4*volume)
+ M.adjustStaminaLoss(volume)
if(iscarbon(M))
M.emote("scream")
@@ -105,7 +105,7 @@
if(method == TOUCH)
volume = ..()
M.apply_damage(0.4*volume, BURN)
- M.adjustStaminaLoss(0.4*volume)
+ M.adjustStaminaLoss(volume)
if(M.reagents)
M.reagents.add_reagent("frostoil", 0.4*volume)
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 8efd181ac1a..02ca42e94d9 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -189,20 +189,20 @@
var/target_loc = target.loc
var/msg
for(var/mob/V in viewers(usr))
- if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
+ if(target == user && !user.stat && !user.IsWeakened() && !user.stunned && !user.paralysis)
V.show_message("[usr] starts climbing into the disposal.", 3)
- if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
+ if(target != user && !user.restrained() && !user.stat && !user.IsWeakened() && !user.stunned && !user.paralysis)
if(target.anchored) return
V.show_message("[usr] starts stuffing [target.name] into the disposal.", 3)
if(!do_after(usr, 20, target = target))
return
if(target_loc != target.loc)
return
- if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis) // if drop self, then climbed in
+ if(target == user && !user.stat && !user.IsWeakened() && !user.stunned && !user.paralysis) // if drop self, then climbed in
// must be awake, not stunned or whatever
msg = "[user.name] climbs into the [src]."
to_chat(user, "You climb into the [src].")
- else if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
+ else if(target != user && !user.restrained() && !user.stat && !user.IsWeakened() && !user.stunned && !user.paralysis)
msg = "[user.name] stuffs [target.name] into the [src]!"
to_chat(user, "You stuff [target.name] into the [src]!")
diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm
index c63cd286787..867e53579be 100644
--- a/code/modules/surgery/helpers.dm
+++ b/code/modules/surgery/helpers.dm
@@ -144,9 +144,9 @@
/proc/can_operate(mob/living/carbon/M)
if(locate(/obj/machinery/optable, M.loc) && (M.lying || M.resting))
return TRUE
- if(locate(/obj/structure/bed, M.loc) && (M.buckled || M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat))
+ if(locate(/obj/structure/bed, M.loc) && (M.buckled || M.lying || M.IsWeakened() || M.stunned || M.paralysis || M.sleeping || M.stat))
return TRUE
- if(locate(/obj/structure/table, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat))
+ if(locate(/obj/structure/table, M.loc) && (M.lying || M.IsWeakened() || M.stunned || M.paralysis || M.sleeping || M.stat))
return TRUE
return FALSE
diff --git a/paradise.dme b/paradise.dme
index abd9b1372a3..35725ea6bbf 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1755,6 +1755,7 @@
#include "code\modules\mob\living\carbon\death.dm"
#include "code\modules\mob\living\carbon\give.dm"
#include "code\modules\mob\living\carbon\life.dm"
+#include "code\modules\mob\living\carbon\status_procs.dm"
#include "code\modules\mob\living\carbon\superheroes.dm"
#include "code\modules\mob\living\carbon\update_icons.dm"
#include "code\modules\mob\living\carbon\update_status.dm"