diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 0b352ee2c12..8b04cc04ebc 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -396,7 +396,8 @@ #define DEFIB_FAIL_FAILING_BRAIN (1<<6) #define DEFIB_FAIL_NO_BRAIN (1<<7) #define DEFIB_FAIL_NO_INTELLIGENCE (1<<8) -#define DEFIB_NOGRAB_AGHOST (1<<9) +#define DEFIB_FAIL_BLACKLISTED (1<<9) +#define DEFIB_NOGRAB_AGHOST (1<<10) // Bit mask of possible return values by can_defib that would result in a revivable patient #define DEFIB_REVIVABLE_STATES (DEFIB_FAIL_NO_HEART | DEFIB_FAIL_FAILING_HEART | DEFIB_FAIL_HUSK | DEFIB_FAIL_TISSUE_DAMAGE | DEFIB_FAIL_FAILING_BRAIN | DEFIB_POSSIBLE) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index e6bfadcefc7..adf3bb26a72 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -147,6 +147,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NEARSIGHT "nearsighted" #define TRAIT_FAT "fat" #define TRAIT_HUSK "husk" +///Blacklisted from being revived via defibrilator +#define TRAIT_DEFIB_BLACKLISTED "defib_blacklisted" #define TRAIT_BADDNA "baddna" #define TRAIT_CLUMSY "clumsy" /// means that you can't use weapons with normal trigger guards. diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index eedcb7cffa5..8a4e743c93a 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -20,6 +20,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NEARSIGHT" = TRAIT_NEARSIGHT, "TRAIT_FAT" = TRAIT_FAT, "TRAIT_HUSK" = TRAIT_HUSK, + "TRAIT_DEFIB_BLACKLISTED" = TRAIT_DEFIB_BLACKLISTED, "TRAIT_BADDNA" = TRAIT_BADDNA, "TRAIT_CLUMSY" = TRAIT_CLUMSY, "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index dd9d2b310d2..edb06c9cca1 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -619,6 +619,8 @@ fail_reason = "No intelligence pattern can be detected in patient's brain. Further attempts futile." if (DEFIB_FAIL_NO_BRAIN) fail_reason = "Patient's brain is missing. Further attempts futile." + if (DEFIB_FAIL_BLACKLISTED) + fail_reason = "Patient has been blacklisted from revival. Further attempts futile." if(fail_reason) user.visible_message(span_warning("[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - [fail_reason]")) diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index f4ea7ae3ca2..944162cdca3 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -441,39 +441,33 @@ if (. == STATION_VICTORY) // If the revolution was quelled, make rev heads unable to be revived through pods - for (var/_rev_head_mind in ex_revs) - var/datum/mind/rev_head_mind = _rev_head_mind - var/mob/living/carbon/rev_head_body = rev_head_mind.current - if(istype(rev_head_body) && rev_head_body.stat == DEAD) - rev_head_body.makeUncloneable() + for (var/datum/mind/rev_head as anything in ex_revs) + ADD_TRAIT(rev_head.current, TRAIT_DEFIB_BLACKLISTED, REF(src)) + rev_head.current.med_hud_set_status() priority_announce("It appears the mutiny has been quelled. Please return yourself and your incapacitated colleagues to work. \ We have remotely blacklisted the head revolutionaries in your medical records to prevent accidental revival.", null, null, null, "Central Command Loyalty Monitoring Division") else - for (var/_player in GLOB.player_list) - var/mob/player = _player - var/datum/mind/mind = player.mind + for (var/mob/living/player as anything in GLOB.player_list) + var/datum/mind/player_mind = player.mind - if (isnull(mind)) + if (isnull(player_mind)) continue - if (!(mind.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND))) + if (!(player_mind.assigned_role.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND))) continue - if (mind in ex_revs + ex_headrevs) + if (player_mind in ex_revs + ex_headrevs) continue - var/mob/living/carbon/target_body = mind.current + player_mind.add_antag_datum(/datum/antagonist/enemy_of_the_revolution) - mind.add_antag_datum(/datum/antagonist/enemy_of_the_revolution) - - if (!istype(target_body)) + if (!istype(player)) continue - if (target_body.stat == DEAD) - target_body.makeUncloneable() - else - mind.announce_objectives() + if(player_mind.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + ADD_TRAIT(player, TRAIT_DEFIB_BLACKLISTED, REF(src)) + player.med_hud_set_status() for(var/datum/job/job as anything in SSjob.joinable_occupations) if(!(job.departments_bitflags & (DEPARTMENT_BITFLAG_SECURITY|DEPARTMENT_BITFLAG_COMMAND))) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 307d3b8f0ad..888b5329b4e 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -860,6 +860,9 @@ if (HAS_TRAIT(src, TRAIT_HUSK)) return DEFIB_FAIL_HUSK + if (HAS_TRAIT(src, TRAIT_DEFIB_BLACKLISTED)) + return DEFIB_FAIL_BLACKLISTED + if ((getBruteLoss() >= MAX_REVIVE_BRUTE_DAMAGE) || (getFireLoss() >= MAX_REVIVE_FIRE_DAMAGE)) return DEFIB_FAIL_TISSUE_DAMAGE