Most actions cannot be used while incapacitated (#73513)

## About The Pull Request

Fixes #39775
The `TRAIT_INCAPACITATED` trait is intended to block you from acting but
does not inherently block actions. Actions only check for "conscious",
"has available hands", "immobile", or "lying down".
Most actions still _can't_ be used while incapacitated. This is because
most actions are spells, most spells have invocations, and you can't
talk while you are incapacitated. This is silly.

I have resolved this by adding a new flag which blocks actions while
incapacitated. This is somewhat redundant with "conscious" because most
sources of that also make you incapacitated but not _always_, you might
want the specificity.

I have tried to be discerning about where this flag is applied, it is
not in all cases (for instance you can still swallow implanted pills
while incapacitated and such), but it's not only possible but I can't
really avoid implementing this without it being a balance change in
_some_ cases,

Actions this effects are things such as:
Xenomorph Tail Sweep, Lesser Magic Missile (cult constucts), Heretic
Shadow Cloak, the Smoke spell in general, Conjuring (but not firing)
Infinite Guns, Mime spells

Times when these actions will no longer be available but were previously
are such times as when the mob is:
Stamina Crit, Stunned, Paralysis, and Time Stopped.

## Why It's Good For The Game

The incapacitated trait is applied by effects which should block acting
but still permits several actions which logically would be prevented.
This fortunately hasn't come up too often due to the high ratio of
actions with invocations, but it feels bad to stun someone and then have
them still able to perform an action they logically wouldn't be able to
take while stunned.
This is especially egregious in the case of Time Stop (the only way to
stun a lot of the mobs effected by this) but that's a rare pick on a
rare antagonist and would also rarely be used on these mobs, so a bit of
an edge case.

## Changelog

🆑
fix: Many spell-like abilities which could be stunned, paralysed, or
frozen in time now cannot be.
/🆑
This commit is contained in:
Jacquerel
2023-02-20 22:47:31 +00:00
committed by GitHub
parent 09fda8fb3d
commit 296ca23aa1
26 changed files with 36 additions and 27 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
overlay_icon_state = "bg_demon_border"
buttontooltipstyle = "cult"
check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS
ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi'
/datum/action/innate/cult/IsAvailable(feedback = FALSE)
@@ -5,7 +5,7 @@
overlay_icon_state = "bg_heretic_border"
button_icon_state = "shield"
ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi'
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
school = SCHOOL_FORBIDDEN
cooldown_time = 5 SECONDS
@@ -17,7 +17,7 @@
name = "Grand Ritual"
desc = "Provides direction to a nexus of power, then draws a rune in that location for completing the Grand Ritual. \
The ritual process will take longer each time it is completed."
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_HANDS_BLOCKED
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED | AB_CHECK_HANDS_BLOCKED
background_icon_state = "bg_spell"
button_icon = 'icons/mob/actions/actions_cult.dmi'
button_icon_state = "draw"
+1 -1
View File
@@ -137,7 +137,7 @@
/datum/action/item_action/chameleon/change
name = "Chameleon Change"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED
var/list/chameleon_blacklist = list() //This is a typecache
var/list/chameleon_list = list()
var/chameleon_type = null
@@ -5,7 +5,7 @@
button_icon_state = "lay_eggs"
background_icon_state = "bg_alien"
overlay_icon_state = "bg_alien_border"
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
///How long it takes for a broodmother to lay eggs.
var/egg_lay_time = 12 SECONDS
///The type of egg we create
@@ -6,7 +6,7 @@
button_icon_state = "lay_web"
background_icon_state = "bg_alien"
overlay_icon_state = "bg_alien_border"
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
cooldown_time = 0 SECONDS
/// How long it takes to lay a web
var/webbing_time = 4 SECONDS
@@ -8,7 +8,7 @@
overlay_icon_state = "bg_alien_border"
button_icon = 'icons/mob/actions/actions_animal.dmi'
button_icon_state = "wrap_0"
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
click_to_activate = TRUE
ranged_mousepointer = 'icons/effects/mouse_pointers/wrap_target.dmi'
/// The time it takes to wrap something.
@@ -13,7 +13,7 @@ Doesn't work on other aliens/AI.*/
overlay_icon_state = "bg_alien_border"
button_icon = 'icons/mob/actions/actions_xeno.dmi'
button_icon_state = "spell_default"
check_flags = AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_IMMOBILE | AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
melee_cooldown_time = 0 SECONDS
/// How much plasma this action uses.
@@ -246,7 +246,7 @@
/datum/action/cooldown/vomit
name = "Vomit"
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
button_icon_state = "vomit"
button_icon = 'icons/mob/simple/animal.dmi'
cooldown_time = 250
@@ -195,7 +195,7 @@
overlay_icon_state = "bg_hive_border"
button_icon = 'icons/mob/actions/actions_slime.dmi'
button_icon_state = "consume"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE|AB_CHECK_INCAPACITATED
///The mob thats being consumed by this creature
var/mob/living/vored_mob
@@ -303,7 +303,7 @@
overlay_icon_state = "bg_hive_border"
button_icon = 'icons/mob/actions/actions_slime.dmi'
button_icon_state = "globules"
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED
cooldown_time = 5 SECONDS
click_to_activate = TRUE
@@ -419,7 +419,7 @@
overlay_icon_state = "bg_hive_border"
button_icon = 'icons/mob/actions/actions_slime.dmi'
button_icon_state = "gel_cocoon"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE|AB_CHECK_INCAPACITATED
cooldown_time = 10 SECONDS
/datum/action/cooldown/gel_cocoon/Activate(atom/target)
@@ -203,7 +203,7 @@
/datum/action/cooldown/domain
name = "Rat King's Domain"
desc = "Corrupts this area to be more suitable for your rat army."
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED
cooldown_time = 6 SECONDS
melee_cooldown_time = 0 SECONDS
button_icon = 'icons/mob/actions/actions_animal.dmi'
@@ -237,7 +237,7 @@
/datum/action/cooldown/riot
name = "Raise Army"
desc = "Raise an army out of the hordes of mice and pests crawling around the maintenance shafts."
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED
button_icon = 'icons/mob/actions/actions_animal.dmi'
button_icon_state = "riot"
background_icon_state = "bg_clock"
@@ -480,7 +480,7 @@
overlay_icon_state = "bg_changeling_border"
button_icon = 'icons/mob/actions/actions_animal.dmi'
button_icon_state = "regurgitate"
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED
melee_cooldown_time = 0 SECONDS
click_to_activate = TRUE
@@ -51,7 +51,7 @@
overlay_icon_state = "bg_revenant_border"
button_icon = 'icons/mob/actions/actions_animal.dmi'
button_icon_state = "tentacle_slap"
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_INCAPACITATED
cooldown_time = 12 SECONDS
melee_cooldown_time = 0 SECONDS
click_to_activate = TRUE
+1 -1
View File
@@ -425,7 +425,7 @@
auto.Grant(buckled_mob, src)
/datum/action/innate/proto_emitter
check_flags = AB_CHECK_HANDS_BLOCKED | AB_CHECK_IMMOBILE | AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_HANDS_BLOCKED | AB_CHECK_IMMOBILE | AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
///Stores the emitter the user is currently buckled on
var/obj/machinery/power/emitter/prototype/proto_emitter
///Stores the mob instance that is buckled to the emitter
+1 -1
View File
@@ -48,7 +48,7 @@
button_icon_state = "spell_default"
overlay_icon_state = "bg_spell_border"
active_overlay_icon_state = "bg_spell_border_active_red"
check_flags = AB_CHECK_CONSCIOUS
check_flags = AB_CHECK_CONSCIOUS | AB_CHECK_INCAPACITATED
panel = "Spells"
melee_cooldown_time = 0 SECONDS
@@ -5,7 +5,7 @@
overlay_icon_state = "bg_mime_border"
button_icon = 'icons/mob/actions/actions_mime.dmi'
button_icon_state = "invisible_chair"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED|AB_CHECK_INCAPACITATED
panel = "Mime"
sound = null
@@ -5,7 +5,7 @@
overlay_icon_state = "bg_mime_border"
button_icon = 'icons/mob/actions/actions_mime.dmi'
button_icon_state = "invisible_wall"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED|AB_CHECK_INCAPACITATED
panel = "Mime"
sound = null
@@ -7,7 +7,7 @@
overlay_icon_state = "bg_mime_border"
button_icon = 'icons/mob/actions/actions_mime.dmi'
button_icon_state = "invisible_box"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED|AB_CHECK_INCAPACITATED
panel = "Mime"
sound = null
@@ -6,7 +6,7 @@
overlay_icon_state = "bg_mime_border"
button_icon = 'icons/mob/actions/actions_mime.dmi'
button_icon_state = "finger_guns0"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED|AB_CHECK_INCAPACITATED
panel = "Mime"
sound = null
@@ -49,7 +49,7 @@
overlay_icon_state = "bg_mime_border"
button_icon = 'icons/mob/actions/actions_mime.dmi'
button_icon_state = "invisible_blockade"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED|AB_CHECK_INCAPACITATED
panel = "Mime"
sound = null
@@ -19,7 +19,7 @@
* (generally) inadvisable unless you know what you're doing
*/
/datum/action/cooldown/spell/touch
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED|AB_CHECK_INCAPACITATED
sound = 'sound/items/welder.ogg'
invocation = "High Five!"
invocation_type = INVOCATION_SHOUT
@@ -1,7 +1,7 @@
///hud action for starting and stopping flight
/datum/action/innate/flight
name = "Toggle Flight"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_IMMOBILE|AB_CHECK_INCAPACITATED
button_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "flight"