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 d2788075e2..f11174f877 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm
@@ -12,7 +12,7 @@
else
icon_state = "alien[caste]_dead"
- else if((stat == UNCONSCIOUS && !asleep) || stat == SOFT_CRIT || IsKnockdown())
+ else if((stat == UNCONSCIOUS && !asleep) || stat == SOFT_CRIT || _MOBILITYFLAGTEMPORARY_IsParalyzed())
icon_state = "alien[caste]_unconscious"
else if(leap_on_click)
icon_state = "alien[caste]_pounce"
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 5f48c6dc3d..7b4cd8a35d 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -182,7 +182,7 @@
if(HAS_TRAIT(src, TRAIT_PACIFISM))
to_chat(src, "You gently let go of [throwable_mob].")
return
-
+
adjustStaminaLossBuffered(25)//CIT CHANGE - throwing an entire person shall be very tiring
var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors
var/turf/end_T = get_turf(target)
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index 3c1a529d3f..b532cdeb51 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -342,16 +342,14 @@
else if (mood.sanity >= SANITY_DISTURBED)
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "friendly_hug", /datum/mood_event/betterhug, M)
- AdjustStun(-60)
- AdjustKnockdown(-60)
- AdjustUnconscious(-60)
- AdjustSleeping(-100)
+ AdjustAllImmobility(-60, FALSE)
+ AdjustUnconscious(-60, FALSE)
+ AdjustSleeping(-100, FALSE)
if(recoveringstam)
adjustStaminaLoss(-15)
else if(resting)
- resting = 0
- update_canmove()
-
+ set_resting(FALSE, FALSE)
+ update_mobility()
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 385ae6cfd4..427318ae84 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -31,7 +31,7 @@
/mob/living/carbon/monkey/handle_mutations_and_radiation()
if(radiation)
if(radiation > RAD_MOB_KNOCKDOWN && prob(RAD_MOB_KNOCKDOWN_PROB))
- if(!IsKnockdown())
+ if(!recoveringstam)
emote("collapse")
DefaultCombatKnockdown(RAD_MOB_KNOCKDOWN_AMOUNT)
to_chat(src, "You feel weak.")
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 1694d04b82..c0b6fcced4 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -18,7 +18,7 @@
icon_state = "ai"
anchored = TRUE
density = TRUE
- canmove = FALSE
+ mobility_flags = NONE
status_flags = CANSTUN|CANPUSH
a_intent = INTENT_HARM //so we always get pushed instead of trying to swap
sight = SEE_TURFS | SEE_MOBS | SEE_OBJS
@@ -316,8 +316,10 @@
to_chat(src, "You are now [anchored ? "" : "un"]anchored.")
// the message in the [] will change depending whether or not the AI is anchored
-/mob/living/silicon/ai/update_canmove() //If the AI dies, mobs won't go through it anymore
- return 0
+// AIs are immobile
+/mob/living/silicon/ai/update_mobility()
+ mobility_flags = NONE
+ return NONE
/mob/living/silicon/ai/proc/ai_cancel_call()
set category = "Malfunction"
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 0ca3c63162..bfd36f66a0 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -91,12 +91,3 @@
add_overlay(fire_overlay)
else
cut_overlay(fire_overlay)
-
-/mob/living/silicon/robot/update_canmove()
- if(stat || buckled || lockcharge || resting) //CITADEL EDIT resting dogborg-os
- canmove = 0
- else
- canmove = 1
- update_transform()
- update_action_buttons_icon()
- return canmove
diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm
index 7e06c66eff..1ecc8f8bfa 100644
--- a/code/modules/mob/living/silicon/robot/robot_defense.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defense.dm
@@ -36,7 +36,7 @@
"[M] has disabled [src]'s active module!", null, COMBAT_MESSAGE_RANGE)
log_combat(M, src, "disarmed", "[I ? " removing \the [I]" : ""]")
else
- Stun(40)
+ _MOBILITYFLAGTEMPORARY_Paralyze(40)
step(src,get_dir(M,src))
log_combat(M, src, "pushed")
visible_message("[M] has forced back [src]!", \
@@ -86,9 +86,9 @@
return
switch(severity)
if(1)
- Stun(160)
+ _MOBILITYFLAGTEMPORARY_Paralyze(160)
if(2)
- Stun(60)
+ _MOBILITYFLAGTEMPORARY_Paralyze(60)
/mob/living/silicon/robot/emag_act(mob/user)
diff --git a/code/modules/mob/living/silicon/robot/robot_mobility.dm b/code/modules/mob/living/silicon/robot/robot_mobility.dm
new file mode 100644
index 0000000000..85018646de
--- /dev/null
+++ b/code/modules/mob/living/silicon/robot/robot_mobility.dm
@@ -0,0 +1,14 @@
+/mob/living/silicon/robot/update_mobility()
+ var/newflags = NONE
+ if(!stat)
+ if(!resting)
+ newflags |= MOBILITY_STAND
+ if(!lockcharge)
+ newflags |= MOBILITY_MOVE
+ newflags |= MOBILITY_PULL
+ if(!lockcharge)
+ newflags |= (MOBILITY_UI | MOBILITY_STORAGE)
+ mobility_flags = newflags
+ update_transform()
+ update_action_buttons_icon()
+ return canmove
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index d2bfb4c608..832ed336c4 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -235,32 +235,32 @@
return P
//Blanket
-/mob/living/proc/AllImmobility(amount, updating)
- Paralyze(amount, FALSE)
- DefaultCombatKnockdown(amount, FALSE)
- Stun(amount, FALSE)
- Immobilize(amount, FALSE)
+/mob/living/proc/AllImmobility(amount, updating, ignore_canstun = FALSE)
+ _MOBILITYFLAGTEMPORARY_Paralyze(amount, FALSE, ignore_canstun)
+ _MOBILITYFLAGTEMPORARY_Knockdown(amount, FALSE, ignore_canstun)
+ _MOBILITYFLAGTEMPORARY_Stun(amount, FALSE, ignore_canstun)
+ _MOBILITYFLAGTEMPORARY_Immobilize(amount, FALSE, ignore_canstun)
if(updating)
update_mobility()
-/mob/living/proc/SetAllImmobility(amount, updating)
- SetParalyzed(amount, FALSE)
- SetKnockdown(amount, FALSE)
- SetStun(amount, FALSE)
- SetImmobilized(amount, FALSE)
+/mob/living/proc/SetAllImmobility(amount, updating, ignore_canstun = FALSE)
+ _MOBILITYFLAGTEMPORARY_SetParalyzed(amount, FALSE, ignore_canstun)
+ _MOBILITYFLAGTEMPORARY_SetKnockdown(amount, FALSE, ignore_canstun)
+ _MOBILITYFLAGTEMPORARY_SetStun(amount, FALSE, ignore_canstun)
+ _MOBILITYFLAGTEMPORARY_SetImmobilized(amount, FALSE, ignore_canstun)
if(updating)
update_mobility()
-/mob/living/proc/AdjustAllImmobility(amount, updating)
- AdjustParalyzed(amount, FALSE)
- AdjustKnockdown(amount, FALSE)
- AdjustStun(amount, FALSE)
- AdjustImmobilized(amount, FALSE)
+/mob/living/proc/AdjustAllImmobility(amount, updating, ignore_canstun = FALSE)
+ _MOBILITYFLAGTEMPORARY_AdjustParalyzed(amount, FALSE, ignore_canstun)
+ _MOBILITYFLAGTEMPORARY_AdjustKnockdown(amount, FALSE, ignore_canstun)
+ _MOBILITYFLAGTEMPORARY_AdjustStun(amount, FALSE, ignore_canstun)
+ _MOBILITYFLAGTEMPORARY_AdjustImmobilized(amount, FALSE, ignore_canstun)
if(updating)
update_mobility()
//////////////////UNCONSCIOUS
-/mob/living/proc/_MOBILITYFLAGTEMPORARY_IsUnconscious() //If we're unconscious
+/mob/living/proc/IsUnconscious() //If we're unconscious
return has_status_effect(STATUS_EFFECT_UNCONSCIOUS)
/mob/living/proc/_MOBILITYFLAGTEMPORARY_AmountUnconscious() //How many deciseconds remain in our unconsciousness
@@ -269,7 +269,7 @@
return U.duration - world.time
return 0
-/mob/living/proc/_MOBILITYFLAGTEMPORARY_Unconscious(amount, updating = TRUE, ignore_canstun = FALSE) //Can't go below remaining duration
+/mob/living/proc/Unconscious(amount, updating = TRUE, ignore_canstun = FALSE) //Can't go below remaining duration
if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_UNCONSCIOUS, amount, updating, ignore_canstun) & COMPONENT_NO_STUN)
return
if(((status_flags & CANUNCONSCIOUS) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canstun)
@@ -280,7 +280,7 @@
U = apply_status_effect(STATUS_EFFECT_UNCONSCIOUS, amount, updating)
return U
-/mob/living/proc/_MOBILITYFLAGTEMPORARY_SetUnconscious(amount, updating = TRUE, ignore_canstun = FALSE) //Sets remaining duration
+/mob/living/proc/SetUnconscious(amount, updating = TRUE, ignore_canstun = FALSE) //Sets remaining duration
if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_UNCONSCIOUS, amount, updating, ignore_canstun) & COMPONENT_NO_STUN)
return
if(((status_flags & CANUNCONSCIOUS) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canstun)
@@ -294,7 +294,7 @@
U = apply_status_effect(STATUS_EFFECT_UNCONSCIOUS, amount, updating)
return U
-/mob/living/proc/_MOBILITYFLAGTEMPORARY_AdjustUnconscious(amount, updating = TRUE, ignore_canstun = FALSE) //Adds to remaining duration
+/mob/living/proc/AdjustUnconscious(amount, updating = TRUE, ignore_canstun = FALSE) //Adds to remaining duration
if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_UNCONSCIOUS, amount, updating, ignore_canstun) & COMPONENT_NO_STUN)
return
if(((status_flags & CANUNCONSCIOUS) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE)) || ignore_canstun)
@@ -307,16 +307,16 @@
/////////////////////////////////// SLEEPING ////////////////////////////////////
-/mob/living/proc/_MOBILITYFLAGTEMPORARY_IsSleeping() //If we're asleep
+/mob/living/proc/IsSleeping() //If we're asleep
return has_status_effect(STATUS_EFFECT_SLEEPING)
-/mob/living/proc/_MOBILITYFLAGTEMPORARY_AmountSleeping() //How many deciseconds remain in our sleep
+/mob/living/proc/AmountSleeping() //How many deciseconds remain in our sleep
var/datum/status_effect/incapacitating/sleeping/S = IsSleeping()
if(S)
return S.duration - world.time
return 0
-/mob/living/proc/_MOBILITYFLAGTEMPORARY_Sleeping(amount, updating = TRUE, ignore_canstun = FALSE) //Can't go below remaining duration
+/mob/living/proc/Sleeping(amount, updating = TRUE, ignore_canstun = FALSE) //Can't go below remaining duration
if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, amount, updating, ignore_canstun) & COMPONENT_NO_STUN)
return
if((!HAS_TRAIT(src, TRAIT_SLEEPIMMUNE)) || ignore_canstun)
@@ -327,7 +327,7 @@
S = apply_status_effect(STATUS_EFFECT_SLEEPING, amount, updating)
return S
-/mob/living/proc/_MOBILITYFLAGTEMPORARY_SetSleeping(amount, updating = TRUE, ignore_canstun = FALSE) //Sets remaining duration
+/mob/living/proc/SetSleeping(amount, updating = TRUE, ignore_canstun = FALSE) //Sets remaining duration
if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, amount, updating, ignore_canstun) & COMPONENT_NO_STUN)
return
if((!HAS_TRAIT(src, TRAIT_SLEEPIMMUNE)) || ignore_canstun)
@@ -341,7 +341,7 @@
S = apply_status_effect(STATUS_EFFECT_SLEEPING, amount, updating)
return S
-/mob/living/proc/_MOBILITYFLAGTEMPORARY_AdjustSleeping(amount, updating = TRUE, ignore_canstun = FALSE) //Adds to remaining duration
+/mob/living/proc/AdjustSleeping(amount, updating = TRUE, ignore_canstun = FALSE) //Adds to remaining duration
if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, amount, updating, ignore_canstun) & COMPONENT_NO_STUN)
return
if((!HAS_TRAIT(src, TRAIT_SLEEPIMMUNE)) || ignore_canstun)
diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm
index 3f88513372..e5cb6f4c67 100644
--- a/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm
+++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot_movement.dm
@@ -1,6 +1,6 @@
/mob/living/silicon/robot/Move(NewLoc, direct)
. = ..()
- if(. && sprinting && !(movement_type & FLYING) && canmove && !resting)
+ if(. && sprinting && !(movement_type & FLYING) && CHECK_MULTIPLE_BITFIELDS(mobility_flags, MOBILITY_STAND | MOBILITY_MOVE)))
if(!(cell?.use(25)))
togglesprint(TRUE)