mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-21 12:08:55 +01:00
People become desensitized to death from exposure (#94924)
## About The Pull Request Desensitized is no longer binary yes/no, now scales from 0.1x to 1x (or beyond, I guess) Desensitized jobs start as 0.5x desensitized (which is the threshold for being considered "truly desensitized") Some antags are now 0.1x to 0.25x desensitized Witnessing death of a fellow human gives you slight desensitization (currently -0.025x). A normal crewmember, after witnessing 20 deaths, is on par with a roundstart desensitized crewmember. Likewise a desensitized crewmember has almost no reaction to death after witnessing 20 deaths. Your own deaths count towards this value. There's an achievement for managing to go from 1x to 0.1x across the course of an entire round. ## Why It's Good For The Game This is intended to contribute to the "story" people face across the length of a round. Rounds with few overall deaths results in crewmembers regularly getting shocked, but bloodbaths results in crewmembers "dehumanizing and facing the bloodshed". ## Changelog 🆑 Melbert add: Desensitization to death is no longer binary - some antagonists are now more used to it than others. add: Witnessing the death of a fellow humanoid (or dying yourself) will slightly desensitize you to future deaths. add: Adds an achievement for managing to max out desensitization across a round. add: Desensitized crewmembers care less when splattered with blood. add: Holodeck mobs have a reduced death mood impact. /🆑
This commit is contained in:
@@ -57,6 +57,8 @@ GLOBAL_LIST_EMPTY(antagonists)
|
||||
var/hardcore_random_bonus = FALSE
|
||||
/// A path to the audio stinger that plays upon gaining this datum.
|
||||
var/stinger_sound
|
||||
/// Multiplicative modifier to the mind's desensitized level when this antagonist is applied. Minimum is 0.1.
|
||||
var/desensitized_modifier = 1.0
|
||||
|
||||
//ANTAG UI
|
||||
|
||||
@@ -262,6 +264,7 @@ GLOBAL_LIST_EMPTY(antagonists)
|
||||
if(type_policy)
|
||||
to_chat(owner.current, type_policy)
|
||||
|
||||
owner.desensitized_level *= max(DESENSITIZED_MINIMUM, desensitized_modifier)
|
||||
apply_innate_effects()
|
||||
give_antag_moodies()
|
||||
RegisterSignal(owner, COMSIG_PRE_MINDSHIELD_IMPLANT, PROC_REF(pre_mindshield))
|
||||
@@ -320,6 +323,7 @@ GLOBAL_LIST_EMPTY(antagonists)
|
||||
if(!owner)
|
||||
CRASH("Antag datum with no owner.")
|
||||
|
||||
owner.desensitized_level /= max(DESENSITIZED_MINIMUM, desensitized_modifier)
|
||||
if(owner.current)
|
||||
remove_innate_effects()
|
||||
clear_antag_moodies()
|
||||
|
||||
@@ -58,7 +58,6 @@
|
||||
SEND_SOUND(mind.current, 'sound/music/antag/bloodcult/bloodcult_eyes.ogg')
|
||||
to_chat(mind.current, span_cult_large(span_warning("The veil weakens as your cult grows, your eyes begin to glow...")))
|
||||
mind.current.AddElement(/datum/element/cult_eyes)
|
||||
ADD_TRAIT(mind.current, TRAIT_DESENSITIZED, CULT_TRAIT)
|
||||
cult_risen = TRUE
|
||||
log_game("The blood cult has risen with [cultplayers] players.")
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
pref_flag = ROLE_CULTIST
|
||||
antag_hud_name = "cult"
|
||||
stinger_sound = 'sound/music/antag/bloodcult/bloodcult_gain.ogg'
|
||||
desensitized_modifier = DESENSITIZED_THRESHOLD
|
||||
|
||||
///Boolean on whether the starting equipment should be given to their inventory.
|
||||
var/give_equipment = FALSE
|
||||
@@ -65,7 +66,6 @@
|
||||
|
||||
if(cult_team.cult_risen)
|
||||
current.AddElement(/datum/element/cult_eyes, initial_delay = 0 SECONDS)
|
||||
ADD_TRAIT(current, TRAIT_DESENSITIZED, CULT_TRAIT)
|
||||
if(cult_team.cult_ascendent)
|
||||
current.AddElement(/datum/element/cult_halo, initial_delay = 0 SECONDS)
|
||||
|
||||
@@ -88,7 +88,6 @@
|
||||
if (HAS_TRAIT(current, TRAIT_CULT_HALO))
|
||||
current.RemoveElement(/datum/element/cult_halo)
|
||||
|
||||
REMOVE_TRAIT(current, TRAIT_DESENSITIZED, CULT_TRAIT)
|
||||
REMOVE_TRAIT(current, TRAIT_HEALS_FROM_CULT_PYLONS, CULT_TRAIT)
|
||||
|
||||
/datum/antagonist/cult/on_mindshield(mob/implanter)
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
suicide_cry = "FOR NANOTRASEN!!"
|
||||
// Not 'true' antags, this disables certain interactions that assume the owner is a baddie
|
||||
antag_flags = ANTAG_FAKE|ANTAG_SKIP_GLOBAL_LIST
|
||||
desensitized_modifier = DESENSITIZED_THRESHOLD * 0.5
|
||||
var/datum/team/ert/ert_team
|
||||
var/leader = FALSE
|
||||
var/datum/outfit/outfit = /datum/outfit/centcom/ert/security
|
||||
@@ -36,14 +37,6 @@
|
||||
equipERT()
|
||||
. = ..()
|
||||
|
||||
/datum/antagonist/ert/apply_innate_effects(mob/living/mob_override)
|
||||
var/mob/living/carbon/human/officer = mob_override || owner.current
|
||||
ADD_TRAIT(officer, TRAIT_DESENSITIZED, REF(src))
|
||||
|
||||
/datum/antagonist/ert/remove_innate_effects(mob/living/mob_override)
|
||||
var/mob/living/carbon/human/officer = mob_override || owner.current
|
||||
REMOVE_TRAIT(officer, TRAIT_DESENSITIZED, REF(src))
|
||||
|
||||
/datum/antagonist/ert/get_team()
|
||||
return ert_team
|
||||
|
||||
|
||||
@@ -654,7 +654,7 @@
|
||||
if(!isnull(ascension_achievement))
|
||||
user.client?.give_award(ascension_achievement, user)
|
||||
heretic_datum.rust_strength = RUST_RESISTANCE_ORGANIC // Ascended heretics can rust whatever they want (below RUST_RESISTANCE_ABSOLUTE)
|
||||
ADD_TRAIT(user, TRAIT_DESENSITIZED, type)
|
||||
user.apply_status_effect(/datum/status_effect/desensitized, type, DESENSITIZED_THRESHOLD * 0.4)
|
||||
return TRUE
|
||||
|
||||
/datum/heretic_knowledge/ultimate/cleanup_atoms(list/selected_atoms)
|
||||
|
||||
@@ -62,9 +62,9 @@
|
||||
on_made_callback?.Invoke(human_target)
|
||||
ADD_TRAIT(human_target, TRAIT_FAKEDEATH, TRAIT_STATUS_EFFECT(id))
|
||||
ADD_TRAIT(human_target, TRAIT_HERETIC_SUMMON, TRAIT_STATUS_EFFECT(id))
|
||||
ADD_TRAIT(human_target, TRAIT_DESENSITIZED, TRAIT_STATUS_EFFECT(id))
|
||||
human_target.become_husk(TRAIT_STATUS_EFFECT(id))
|
||||
human_target.add_faction(FACTION_HERETIC)
|
||||
human_target.apply_status_effect(/datum/status_effect/desensitized, TRAIT_STATUS_EFFECT(id), DESENSITIZED_THRESHOLD * 0.2)
|
||||
|
||||
if(human_target.mind)
|
||||
var/datum/antagonist/heretic_monster/heretic_monster = human_target.mind.add_antag_datum(/datum/antagonist/heretic_monster)
|
||||
@@ -93,9 +93,9 @@
|
||||
on_lost_callback?.Invoke(human_target)
|
||||
REMOVE_TRAIT(human_target, TRAIT_FAKEDEATH, TRAIT_STATUS_EFFECT(id))
|
||||
REMOVE_TRAIT(human_target, TRAIT_HERETIC_SUMMON, TRAIT_STATUS_EFFECT(id))
|
||||
REMOVE_TRAIT(human_target, TRAIT_DESENSITIZED, TRAIT_STATUS_EFFECT(id))
|
||||
human_target.cure_husk(TRAIT_STATUS_EFFECT(id))
|
||||
human_target.remove_faction(FACTION_HERETIC)
|
||||
human_target.remove_status_effect(/datum/status_effect/desensitized, TRAIT_STATUS_EFFECT(id))
|
||||
human_target.mind?.remove_antag_datum(/datum/antagonist/heretic_monster)
|
||||
|
||||
UnregisterSignal(human_target, COMSIG_LIVING_DEATH)
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
can_elimination_hijack = ELIMINATION_ENABLED
|
||||
suicide_cry = "FOR SCOTLAND!!" // If they manage to lose their no-drop stuff somehow
|
||||
antag_flags = ANTAG_FAKE|ANTAG_SKIP_GLOBAL_LIST
|
||||
desensitized_modifier = DESENSITIZED_THRESHOLD * 0.2
|
||||
/// Traits we apply/remove to our target on-demand.
|
||||
var/static/list/applicable_traits = list(
|
||||
TRAIT_DESENSITIZED,
|
||||
TRAIT_NOBREATH,
|
||||
TRAIT_NODISMEMBER,
|
||||
TRAIT_NOFIRE,
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
hijack_speed = 2 //If you can't take out the station, take the shuttle instead.
|
||||
suicide_cry = "FOR THE SYNDICATE!!"
|
||||
stinger_sound = 'sound/music/antag/ops.ogg'
|
||||
desensitized_modifier = DESENSITIZED_THRESHOLD * 0.5
|
||||
|
||||
/// Which nukie team are we on?
|
||||
var/datum/team/nuclear/nuke_team
|
||||
@@ -132,7 +133,6 @@
|
||||
|
||||
var/mob/living/carbon/human/operative = owner.current
|
||||
ADD_TRAIT(operative, TRAIT_NOFEAR_HOLDUPS, INNATE_TRAIT)
|
||||
ADD_TRAIT(operative, TRAIT_DESENSITIZED, INNATE_TRAIT)
|
||||
|
||||
if(!nukeop_outfit) // this variable is null in instances where an antagonist datum is granted via enslaving the mind (/datum/mind/proc/enslave_mind_to_creator), like in golems.
|
||||
return
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
suicide_cry = "FOR ME MATEYS!!"
|
||||
stinger_sound = 'sound/music/antag/pirate/pirate_start.ogg'
|
||||
hijack_speed = 2 // That is without doubt the worst pirate I have ever seen.
|
||||
desensitized_modifier = DESENSITIZED_THRESHOLD
|
||||
var/datum/team/pirate/crew
|
||||
|
||||
/datum/antagonist/pirate/greet()
|
||||
@@ -46,12 +47,10 @@
|
||||
var/datum/language_holder/holder = owner_mob.get_language_holder()
|
||||
holder.grant_language(/datum/language/piratespeak, source = LANGUAGE_PIRATE)
|
||||
holder.selected_language = /datum/language/piratespeak
|
||||
ADD_TRAIT(owner_mob, TRAIT_DESENSITIZED, REF(src))
|
||||
|
||||
/datum/antagonist/pirate/remove_innate_effects(mob/living/mob_override)
|
||||
var/mob/living/owner_mob = mob_override || owner.current
|
||||
owner_mob.remove_language(/datum/language/piratespeak, source = LANGUAGE_PIRATE)
|
||||
REMOVE_TRAIT(owner_mob, TRAIT_DESENSITIZED, REF(src))
|
||||
|
||||
/datum/team/pirate
|
||||
name = "\improper Pirate crew"
|
||||
|
||||
@@ -12,17 +12,10 @@
|
||||
can_assign_self_objectives = TRUE
|
||||
ui_name = "AntagInfoNinja"
|
||||
default_custom_objective = "Destroy vital station infrastructure, without being seen."
|
||||
desensitized_modifier = DESENSITIZED_THRESHOLD
|
||||
///Whether or not this ninja will obtain objectives
|
||||
var/give_objectives = TRUE
|
||||
|
||||
/datum/antagonist/ninja/apply_innate_effects(mob/living/mob_override)
|
||||
var/mob/ninja = mob_override || owner.current
|
||||
ADD_TRAIT(ninja, TRAIT_DESENSITIZED, REF(src))
|
||||
|
||||
/datum/antagonist/ninja/remove_innate_effects(mob/living/mob_override)
|
||||
var/mob/ninja = mob_override || owner.current
|
||||
REMOVE_TRAIT(ninja, TRAIT_DESENSITIZED, REF(src))
|
||||
|
||||
/**
|
||||
* Proc that equips the space ninja outfit on a given individual. By default this is the owner of the antagonist datum.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user