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"