diff --git a/code/__DEFINES/actions.dm b/code/__DEFINES/actions.dm index 971e3441577..10e3baac4e7 100644 --- a/code/__DEFINES/actions.dm +++ b/code/__DEFINES/actions.dm @@ -6,6 +6,8 @@ #define AB_CHECK_LYING (1<<2) ///Action button checks if user is conscious #define AB_CHECK_CONSCIOUS (1<<3) +///Action button checks if user is incapacitated +#define AB_CHECK_INCAPACITATED (1<<4) DEFINE_BITFIELD(check_flags, list( "CHECK IF HANDS BLOCKED" = AB_CHECK_HANDS_BLOCKED, diff --git a/code/datums/actions/action.dm b/code/datums/actions/action.dm index 9f427ca4f7c..0dc44b46640 100644 --- a/code/datums/actions/action.dm +++ b/code/datums/actions/action.dm @@ -95,6 +95,8 @@ // so that our button icon updates when relevant if(check_flags & AB_CHECK_CONSCIOUS) RegisterSignal(owner, COMSIG_MOB_STATCHANGE, PROC_REF(update_status_on_signal)) + if(check_flags & AB_CHECK_INCAPACITATED) + RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_INCAPACITATED), PROC_REF(update_status_on_signal)) if(check_flags & AB_CHECK_IMMOBILE) RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_IMMOBILIZED), PROC_REF(update_status_on_signal)) if(check_flags & AB_CHECK_HANDS_BLOCKED) @@ -127,6 +129,7 @@ COMSIG_MOB_STATCHANGE, SIGNAL_ADDTRAIT(TRAIT_HANDS_BLOCKED), SIGNAL_ADDTRAIT(TRAIT_IMMOBILIZED), + SIGNAL_ADDTRAIT(TRAIT_INCAPACITATED), )) if(target == owner) @@ -157,6 +160,10 @@ if (feedback) owner.balloon_alert(owner, "can't move!") return FALSE + if((check_flags & AB_CHECK_INCAPACITATED) && HAS_TRAIT(owner, TRAIT_INCAPACITATED)) + if (feedback) + owner.balloon_alert(owner, "incapacitated!") + return FALSE if((check_flags & AB_CHECK_LYING) && isliving(owner)) var/mob/living/action_owner = owner if(action_owner.body_position == LYING_DOWN) diff --git a/code/datums/actions/item_action.dm b/code/datums/actions/item_action.dm index 6d7beec65e2..9f40c72b44b 100644 --- a/code/datums/actions/item_action.dm +++ b/code/datums/actions/item_action.dm @@ -1,7 +1,7 @@ //Presets for item actions /datum/action/item_action name = "Item Action" - check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS + check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_HANDS_BLOCKED|AB_CHECK_CONSCIOUS button_icon_state = null /datum/action/item_action/New(Target) diff --git a/code/datums/actions/items/stealth_box.dm b/code/datums/actions/items/stealth_box.dm index 9d1c6276511..bf297e4e1c2 100644 --- a/code/datums/actions/items/stealth_box.dm +++ b/code/datums/actions/items/stealth_box.dm @@ -2,7 +2,7 @@ /datum/action/item_action/agent_box name = "Deploy Box" desc = "Find inner peace, here, in the box." - 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 background_icon_state = "bg_agent" overlay_icon_state = "bg_agent_border" button_icon = 'icons/mob/actions/actions_items.dmi' diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 23d4b2a7632..674465c9743 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -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) diff --git a/code/modules/antagonists/heretic/magic/rust_construction.dm b/code/modules/antagonists/heretic/magic/rust_construction.dm index 3556689baa3..08973093da0 100644 --- a/code/modules/antagonists/heretic/magic/rust_construction.dm +++ b/code/modules/antagonists/heretic/magic/rust_construction.dm @@ -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 diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm b/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm index bd4a0b1b0d8..ce1d89edcc6 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_ritual.dm @@ -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" diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 335f88112a6..2f914535177 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -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 diff --git a/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/lay_eggs.dm b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/lay_eggs.dm index 518ac036bca..0fb1170c607 100644 --- a/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/lay_eggs.dm +++ b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/lay_eggs.dm @@ -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 diff --git a/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/web.dm b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/web.dm index 1c70131ffd7..45e44a3e4f1 100644 --- a/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/web.dm +++ b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/web.dm @@ -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 diff --git a/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/wrap.dm b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/wrap.dm index 66653c7529e..2c49f5747c7 100644 --- a/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/wrap.dm +++ b/code/modules/mob/living/basic/space_fauna/giant_spider/spider_abilities/wrap.dm @@ -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. diff --git a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm index e135154877c..c83e2af7487 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -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. diff --git a/code/modules/mob/living/simple_animal/hostile/goose.dm b/code/modules/mob/living/simple_animal/hostile/goose.dm index eb08c3b15df..b56816e13f7 100644 --- a/code/modules/mob/living/simple_animal/hostile/goose.dm +++ b/code/modules/mob/living/simple_animal/hostile/goose.dm @@ -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 diff --git a/code/modules/mob/living/simple_animal/hostile/ooze.dm b/code/modules/mob/living/simple_animal/hostile/ooze.dm index b57093e5671..5184b5e3fad 100644 --- a/code/modules/mob/living/simple_animal/hostile/ooze.dm +++ b/code/modules/mob/living/simple_animal/hostile/ooze.dm @@ -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) diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm index 225f88e030b..c3cfe621bfa 100644 --- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm +++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm @@ -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" diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 9597dff77b6..6285cb4031a 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -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 diff --git a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm index 4df4b7bcd75..7c6edeb88da 100644 --- a/code/modules/mob/living/simple_animal/hostile/vatbeast.dm +++ b/code/modules/mob/living/simple_animal/hostile/vatbeast.dm @@ -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 diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index c7e9c806c85..7a03d21afb5 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -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 diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 8bc805bf5e2..29e19d85b99 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -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 diff --git a/code/modules/spells/spell_types/conjure/invisible_chair.dm b/code/modules/spells/spell_types/conjure/invisible_chair.dm index 6a987be0fea..125cd4cf75f 100644 --- a/code/modules/spells/spell_types/conjure/invisible_chair.dm +++ b/code/modules/spells/spell_types/conjure/invisible_chair.dm @@ -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 diff --git a/code/modules/spells/spell_types/conjure/invisible_wall.dm b/code/modules/spells/spell_types/conjure/invisible_wall.dm index f081ef1021b..a61db7cf74e 100644 --- a/code/modules/spells/spell_types/conjure/invisible_wall.dm +++ b/code/modules/spells/spell_types/conjure/invisible_wall.dm @@ -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 diff --git a/code/modules/spells/spell_types/conjure_item/invisible_box.dm b/code/modules/spells/spell_types/conjure_item/invisible_box.dm index 3ff8abdded9..af6d5586af2 100644 --- a/code/modules/spells/spell_types/conjure_item/invisible_box.dm +++ b/code/modules/spells/spell_types/conjure_item/invisible_box.dm @@ -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 diff --git a/code/modules/spells/spell_types/pointed/finger_guns.dm b/code/modules/spells/spell_types/pointed/finger_guns.dm index 5f1271b7b81..feb47f2d882 100644 --- a/code/modules/spells/spell_types/pointed/finger_guns.dm +++ b/code/modules/spells/spell_types/pointed/finger_guns.dm @@ -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 diff --git a/code/modules/spells/spell_types/self/forcewall.dm b/code/modules/spells/spell_types/self/forcewall.dm index feab8f305c0..761860f4099 100644 --- a/code/modules/spells/spell_types/self/forcewall.dm +++ b/code/modules/spells/spell_types/self/forcewall.dm @@ -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 diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index 6fab59c54ef..4428eddaf24 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -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 diff --git a/code/modules/surgery/organs/external/wings/functional_wings.dm b/code/modules/surgery/organs/external/wings/functional_wings.dm index 902f2b6b6ac..a49b7264019 100644 --- a/code/modules/surgery/organs/external/wings/functional_wings.dm +++ b/code/modules/surgery/organs/external/wings/functional_wings.dm @@ -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"