mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 21:48:39 +01:00
[MIRROR] Floored trait (#329)
* Floored trait (#52884) Refactors mobility, so we respond to more things as events. One has_legs and has_arms are turned into events we'll be close to be able to eschew update_mobility() * Floored trait Co-authored-by: Rohesie <rohesie@gmail.com>
This commit is contained in:
@@ -78,6 +78,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
//mob traits
|
||||
#define TRAIT_KNOCKEDOUT "knockedout" //Forces the user to stay unconscious.
|
||||
#define TRAIT_IMMOBILIZED "immobilized" //Prevents voluntary movement.
|
||||
#define TRAIT_FLOORED "floored" //Prevents standing or staying up on its own.
|
||||
#define TRAIT_INCAPACITATED "incapacitated"
|
||||
#define TRAIT_BLIND "blind"
|
||||
#define TRAIT_MUTE "mute"
|
||||
@@ -246,7 +247,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
// common trait sources
|
||||
#define TRAIT_GENERIC "generic"
|
||||
#define GENERIC_ITEM_TRAIT "generic_item"
|
||||
#define UNCONSCIOUS_BLIND "unconscious_blind"
|
||||
#define UNCONSCIOUS_TRAIT "unconscious"
|
||||
#define EYE_DAMAGE "eye_damage"
|
||||
#define EAR_DAMAGE "ear_damage"
|
||||
#define GENETIC_MUTATION "genetic"
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
owner.update_stat()
|
||||
return ..()
|
||||
|
||||
|
||||
//STUN
|
||||
/datum/status_effect/incapacitating/stun
|
||||
id = "stun"
|
||||
@@ -40,10 +41,21 @@
|
||||
REMOVE_TRAIT(owner, TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id))
|
||||
return ..()
|
||||
|
||||
|
||||
//KNOCKDOWN
|
||||
/datum/status_effect/incapacitating/knockdown
|
||||
id = "knockdown"
|
||||
|
||||
/datum/status_effect/incapacitating/knockdown/on_apply()
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
ADD_TRAIT(owner, TRAIT_FLOORED, TRAIT_STATUS_EFFECT(id))
|
||||
|
||||
/datum/status_effect/incapacitating/knockdown/on_remove()
|
||||
REMOVE_TRAIT(owner, TRAIT_FLOORED, TRAIT_STATUS_EFFECT(id))
|
||||
return ..()
|
||||
|
||||
|
||||
//IMMOBILIZED
|
||||
/datum/status_effect/incapacitating/immobilized
|
||||
@@ -60,6 +72,7 @@
|
||||
return ..()
|
||||
|
||||
|
||||
//PARALYZED
|
||||
/datum/status_effect/incapacitating/paralyzed
|
||||
id = "paralyzed"
|
||||
|
||||
@@ -69,12 +82,15 @@
|
||||
return
|
||||
ADD_TRAIT(owner, TRAIT_INCAPACITATED, TRAIT_STATUS_EFFECT(id))
|
||||
ADD_TRAIT(owner, TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id))
|
||||
ADD_TRAIT(owner, TRAIT_FLOORED, TRAIT_STATUS_EFFECT(id))
|
||||
|
||||
/datum/status_effect/incapacitating/paralyzed/on_remove()
|
||||
REMOVE_TRAIT(owner, TRAIT_INCAPACITATED, TRAIT_STATUS_EFFECT(id))
|
||||
REMOVE_TRAIT(owner, TRAIT_IMMOBILIZED, TRAIT_STATUS_EFFECT(id))
|
||||
REMOVE_TRAIT(owner, TRAIT_FLOORED, TRAIT_STATUS_EFFECT(id))
|
||||
return ..()
|
||||
|
||||
|
||||
//UNCONSCIOUS
|
||||
/datum/status_effect/incapacitating/unconscious
|
||||
id = "unconscious"
|
||||
@@ -94,6 +110,7 @@
|
||||
if(owner.getStaminaLoss())
|
||||
owner.adjustStaminaLoss(-0.3) //reduce stamina loss by 0.3 per tick, 6 per 2 seconds
|
||||
|
||||
|
||||
//SLEEPING
|
||||
/datum/status_effect/incapacitating/sleeping
|
||||
id = "sleeping"
|
||||
|
||||
@@ -995,10 +995,12 @@
|
||||
if(GRAB_PASSIVE, GRAB_AGGRESSIVE)
|
||||
if(grab_state >= GRAB_NECK)
|
||||
ADD_TRAIT(pulling, TRAIT_IMMOBILIZED, CHOKEHOLD_TRAIT)
|
||||
ADD_TRAIT(pulling, TRAIT_FLOORED, CHOKEHOLD_TRAIT)
|
||||
switch(grab_state) //Current state.
|
||||
if(GRAB_PASSIVE, GRAB_AGGRESSIVE)
|
||||
if(. >= GRAB_NECK)
|
||||
REMOVE_TRAIT(pulling, TRAIT_IMMOBILIZED, CHOKEHOLD_TRAIT)
|
||||
REMOVE_TRAIT(pulling, TRAIT_FLOORED, CHOKEHOLD_TRAIT)
|
||||
|
||||
|
||||
/obj/item/proc/do_pickup_animation(atom/target)
|
||||
|
||||
@@ -1204,14 +1204,13 @@
|
||||
var/has_legs = get_num_legs()
|
||||
var/has_arms = get_num_arms()
|
||||
var/paralyzed = IsParalyzed()
|
||||
var/knockdown = IsKnockdown()
|
||||
var/ignore_legs = get_leg_ignore()
|
||||
var/canmove = !HAS_TRAIT(src, TRAIT_IMMOBILIZED) && (has_arms || ignore_legs || has_legs)
|
||||
if(canmove)
|
||||
mobility_flags |= MOBILITY_MOVE
|
||||
else
|
||||
mobility_flags &= ~MOBILITY_MOVE
|
||||
var/canstand_involuntary = stat_conscious && !stat_softcrit && !knockdown && !chokehold && !paralyzed && (ignore_legs || has_legs) && !(buckled && buckled.buckle_lying)
|
||||
var/canstand_involuntary = !HAS_TRAIT(src, TRAIT_FLOORED) && (ignore_legs || has_legs)
|
||||
var/canstand = canstand_involuntary && !resting
|
||||
|
||||
if(buckled && buckled.buckle_lying != -1)
|
||||
@@ -1636,24 +1635,26 @@
|
||||
if(CONSCIOUS)
|
||||
if(stat >= UNCONSCIOUS)
|
||||
ADD_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT)
|
||||
ADD_TRAIT(src, TRAIT_FLOORED, UNCONSCIOUS_TRAIT)
|
||||
if(SOFT_CRIT)
|
||||
if(stat >= UNCONSCIOUS)
|
||||
ADD_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT) //adding trait sources should come before removing to avoid unnecessary updates
|
||||
if(pulledby)
|
||||
REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, PULLED_WHILE_SOFTCRIT_TRAIT)
|
||||
if(UNCONSCIOUS)
|
||||
cure_blind(UNCONSCIOUS_BLIND)
|
||||
cure_blind(UNCONSCIOUS_TRAIT)
|
||||
switch(stat) //Current stat.
|
||||
if(CONSCIOUS)
|
||||
if(. >= UNCONSCIOUS)
|
||||
REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT)
|
||||
REMOVE_TRAIT(src, TRAIT_FLOORED, UNCONSCIOUS_TRAIT)
|
||||
if(SOFT_CRIT)
|
||||
if(pulledby)
|
||||
ADD_TRAIT(src, TRAIT_IMMOBILIZED, PULLED_WHILE_SOFTCRIT_TRAIT) //adding trait sources should come before removing to avoid unnecessary updates
|
||||
if(. >= UNCONSCIOUS)
|
||||
REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, TRAIT_KNOCKEDOUT)
|
||||
if(UNCONSCIOUS)
|
||||
become_blind(UNCONSCIOUS_BLIND)
|
||||
become_blind(UNCONSCIOUS_TRAIT)
|
||||
|
||||
|
||||
///Reports the event of the change in value of the buckled variable.
|
||||
@@ -1666,8 +1667,11 @@
|
||||
if(buckled)
|
||||
if(!.)
|
||||
ADD_TRAIT(src, TRAIT_IMMOBILIZED, BUCKLED_TRAIT)
|
||||
if(buckled.buckle_lying)
|
||||
ADD_TRAIT(src, TRAIT_FLOORED, BUCKLED_TRAIT)
|
||||
else if(.)
|
||||
REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, BUCKLED_TRAIT)
|
||||
REMOVE_TRAIT(src, TRAIT_FLOORED, BUCKLED_TRAIT)
|
||||
|
||||
|
||||
/mob/living/set_pulledby(new_pulledby)
|
||||
|
||||
Reference in New Issue
Block a user